Как образовательный проект, я пишу (еще один) редактор с подсветкой синтаксиса в стиле JavaScript.
Чтобы редактор работал быстро, я, очевидно, предпочел асинхронную работу подсветчика, однако в модели, которую я использую, мне нужно иметь возможность завершить подсветку перед запуском другой, если что-то набрано до завершения текущего подсветчика, и знать, что он заканчивается до запуска нового.
Я думал о том, чтобы сделать что-то вроде следующего:
var terminate = false;
var terminated = false;
function work() {
while(!terminate)
console.log('working');
terminated = true;
}
function stop() {
terminate = true;
while(!terminated);
console.log('stopped');
}
setTimeout(work, 0);
setTimeout(stop, 10);
Этот пример, однако, не работает, и я попытался использовать больше setTimeouts вместо занятого ожидания, но безрезультатно.
Есть ли способ реализовать такую систему в JavaScript или мне следует использовать какую-то альтернативу (или обе)?