我在Node.js中有一個函數,它接受一個數組並在其中循環,對每個元素進行一些耗時的計算。Synchronous forEach循環(等待它結束)
這裏的功能的超級簡化版:
var analyze_data = function (data) {
data.forEach(function (elm) {
if (elm.myProp == true) {
return true;
}
});
return false;
}
從本質上講,我希望函數,如果任何元素的屬性myProp
的等於真返回true。如果沒有元素滿足這個條件,該函數應該返回false。
但是,代碼永遠不會等待forEach循環完成。換句話說,如果數組中的第100個元素滿足條件,則函數應該返回true。相反,它會跳到return false;
,並在forEach
循環有時間完成之前返回false。
有沒有解決方案?
編輯
所以我意識到,我過於簡單化了我的問題 - 我實際使用Node.js package es6-promise,和我的代碼看起來更像是這樣的:
var analyze_data = function (data) {
return new Promise(function (resolve, reject) {
data.forEach(function (elm) {
if (elm.myProp == true) {
resolve(elm);
}
});
resolve(false);
});
}
所以在現實中,我沒有返回forEach函數中的值而不是外部函數的問題。此外,請注意函數如何解析爲元素本身而不是真,否則爲false。如果其中一個元素通過了條件,我實際上想要返回一些相關數據,否則返回false以表明它們全部失敗。
現在有什麼想法? :p另外,感謝所有原始答案!
如果切換到諾言,你可以用'Q.all',例如。 https://github.com/kriskowal/q/wiki/API-Reference#promiseall – akonsu 2014-10-31 15:43:08
你只是在錯誤的地方返回真值,試着使用'Array.prototype.some' – micnic 2014-10-31 15:47:52