我有一個包含各種數據的大數組,以及一個對數組執行一些基本的但有點耗時的分析的函數。我使用forEach循環遍歷數組。我想如果條件滿足時,函數返回一個特定的元素,否則爲false,使用的承諾,因爲函數可能需要相當長的時間來完成:以下代碼是否等待forEach完成
var analyzeData = function (arr) {
return new Promise(function (resolve, reject) {
var answer = false;
arr.forEach(function (elm) {
if (elm.foo == true) {
answer = elm;
}
});
resolve(answer);
});
}
我現在遇到的問題是,我懷疑在forEach循環完成之前正在解析answer
;即在forEach循環可以完成檢查每個元素的foo
屬性之前,該功能解析爲answer
,其默認爲false。
有沒有辦法確保forEach循環後面的代碼等待循環完成迭代,或者以某種其他方式遍歷數組?
'Array.prototype.forEach()'是同步的。所以它完成了對所有數組元素的迭代,只有解釋器纔會計算下一個語句。 – zerkms 2014-11-04 20:53:38
@zerkms我也這麼認爲 - 任何想法爲什麼我會遇到這個問題呢? – apparatix 2014-11-04 20:55:32
@apparatix:我們不知道你遇到什麼問題。你應該[創建一個最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve)。 – ruakh 2014-11-04 20:56:16