Din föreslagna lösning (i din redigering) kommer inte att fungera eftersom du aldrig ger upp tråden (så återuppringningen kan aldrig anropas, så variabeln kan aldrig ställas in, så din loop går aldrig av). Noden är inte flertrådad - det finns bara en tråd som kör javascript åt gången. Det finns inget sätt att ge den tråden utom genom att återvända från vilken kod som helst som körs.
Så du kan inte göra vad du vill göra. Du kan försöka använda några av lösningarna som omskriver din synkroniseringskod till asynkron bakom kulisserna, men jag har personligen funnit att tillvägagångssättet inte riktigt är värt ansträngningen - det är bättre att bara bita ihop och bara göra allt med callbacks (med tiden avtar smärtan :).