Su solución propuesta (en su edición) no funcionará porque nunca abandona el hilo (por lo que nunca se puede llamar a la devolución de llamada, por lo que la variable nunca se puede establecer, por lo que su ciclo nunca se rompe). El nodo no tiene subprocesos múltiples:solo hay un subproceso que ejecuta javascript en un momento dado. No hay forma de producir ese hilo, excepto regresando desde cualquier código que se esté ejecutando.
Entonces, no puedes hacer lo que quieres hacer. Podría intentar usar algunas de las soluciones que reescriben su código de sincronización en asíncrono detrás de escena, pero personalmente he descubierto que ese enfoque realmente no vale la pena, es mejor morder la bala y simplemente hacer todo con devoluciones de llamada (con el tiempo el dolor disminuye :).