Предложеното от вас решение (във вашата редакция) няма да работи, защото никога не се отказвате от нишката (така че обратното извикване никога не може да бъде извикано, така че променливата никога не може да бъде зададена, така че вашият цикъл никога не прекъсва). Възелът не е многонишков - има само една нишка, изпълняваща javascript по всяко време. Няма начин да се изведе тази нишка, освен чрез връщане от който и да е код, който се изпълнява.
Така че не можете да правите това, което искате. Можете да опитате да използвате някои от решенията, които пренаписват вашия код за синхронизиране в асинхронен зад кулисите, но аз лично открих, че този подход всъщност не си струва усилията - по-добре е просто да захапете куршума и просто да го направите всичко с обратни повиквания (с времето болката отшумява :).