Yeah it blocks the thread, any other "user work" needs to happen on a different thread. But if you just need multiple non-blocking IO operations run in parallel it's as simple as it gets.
(the operating system's thread scheduler is basically the equivalent to the JS "event loop").