【发布时间】:2014-12-31 21:53:57
【问题描述】:
我有一个包含各种数据的大型数组,以及一个对数组执行一些基本但有点耗时的分析的函数。
我使用 forEach 循环遍历数组。如果满足条件,我希望函数返回特定元素,否则返回 false,使用 Promises,因为该函数可能需要相当长的时间才能完成:
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);
});
}
我遇到的问题是我怀疑 answer 在 forEach 循环完成之前就已经解决了;即在 forEach 循环完成检查每个元素的foo 属性之前,函数解析为answer,默认为false。
有没有办法确保forEach循环之后的代码等待循环完成迭代,或者以其他方式循环遍历数组?
【问题讨论】:
-
Array.prototype.forEach()是同步的。所以它完成了对所有数组元素的迭代,然后解释器才评估下一条语句。 -
@zerkms 我也这么认为 - 任何想法为什么我会遇到这个问题?
-
@apparatix:我们不知道您遇到了什么问题。你应该create a Minimal, Complete, and Verifiable example。
-
@apparatix:我不确定您指的是什么“问题”。此代码在 迭代完成后解析承诺。
标签: javascript arrays node.js foreach promise