我有一個非常同步的大腳本。JavaScript:異步函數,恢復到同步
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」