У меня большой сценарий, который очень синхронный.
1) он выполняет такую функцию:
var result = doSomethingSynchronous(myVar);
if (result === 'something') {
doSomethingElse();
}
функция doSomethingSynchronous имеет цикл for, который возвращает значение вОператор if:
var i = 0; len = someVariable.length;
for (; i < len; i++) {
if (someVariable[i] === 'aString') {
return true;
} else {
doSomethingElse();
}
}
Поскольку цикл for и обработка могут быть интенсивными, я заменил цикл for функцией итеративной обработки очереди, которая запускается сама по себе с использованием setTimeout после перемещения одного элемента из массива.Разумеется, если он выполняется асинхронно, он не возвращает значение и назначает его переменной 'result' в первом фрагменте синхронно, а оператор if всегда завершается неудачей.У меня вопрос, есть ли способ сохранить эту часть синхронной?Нужно ли присваивать значение результату до того, как скрипт перейдет к следующей строке?Или мне необходимо использовать шаблон наблюдателя / посредника или аналогичный для уведомления о завершении асинхронной функции?
В качестве альтернативы я мог бы использовать обратный вызов, но реальный реальный код длиннее, чем этот, и все зависят отсинхронность.Таким образом, переключение var result = doSomethingSynchronous () на асинхронный будет иметь эффект домино на остальных синхронных сценариях, верно?:-) Это звучит как трудное и подверженное ошибкам преобразование, поэтому я подумал, что я бы попросил совета.
Спасибо!
- UDPATED для исправления имени переменной "le".Должно быть "len"