Twoje proponowane rozwiązanie (w twojej edycji) nie zadziała, ponieważ nigdy nie rezygnujesz z wątku (więc nigdy nie można wywołać wywołania zwrotnego, więc zmienna nigdy nie może być ustawiona, więc twoja pętla nigdy się nie zepsuje). Węzeł nie jest wielowątkowy - w danym momencie jest tylko jeden wątek wykonujący javascript. Nie ma sposobu, aby uzyskać ten wątek, z wyjątkiem powrotu z dowolnego uruchomionego kodu.
Więc nie możesz robić tego, co chcesz. Możesz spróbować użyć niektórych rozwiązań, które zakulisowo przepisują Twój kod synchronizacji na asynchroniczny, ale osobiście stwierdziłem, że takie podejście nie jest naprawdę warte wysiłku — lepiej po prostu ugryźć kulę i po prostu zrobić wszystko z callbackami (z czasem ból ustępuje :).