我有一个包含各种数据的大数组,以及一个对数组执行一些基本的但有点耗时的分析的函数。我使用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