Giải pháp được đề xuất của bạn (trong bản chỉnh sửa của bạn) sẽ không hoạt động bởi vì bạn không bao giờ từ bỏ luồng (vì vậy lệnh gọi lại không bao giờ có thể được gọi, vì vậy biến không bao giờ có thể được đặt, vì vậy vòng lặp của bạn không bao giờ bị hỏng). Nút không phải là đa luồng - chỉ có một luồng thực thi javascript tại một thời điểm bất kỳ. Không có cách nào để mang lại chuỗi đó ngoại trừ bằng cách quay lại từ bất kỳ mã nào đang chạy.
Vì vậy, bạn không thể làm những gì bạn muốn làm. Bạn có thể thử sử dụng một số giải pháp viết lại mã đồng bộ của mình thành không đồng bộ đằng sau hậu trường, nhưng cá nhân tôi thấy rằng cách tiếp cận đó không thực sự đáng để nỗ lực - tốt hơn là chỉ cần cắn đạn và chỉ làm mọi thứ với callbacks (theo thời gian nỗi đau giảm dần :).