下面的代码等待forEach完成

我有一个包含各种数据的大型数组,以及一个对数组执行一些基本的但是耗时的分析的函数。

我使用forEach循环遍历数组。 如果条件满足,我希望函数返回一个特定的元素,否则使用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); }); } 

我遇到的问题是,我怀疑在forEach循环完成之前, answer正在解决; 即在forEach循环可以完成检查每个元素的foo属性之前,函数parsing为answer ,默认为false。

有没有办法确保forEach循环之后的代码等待循环完成迭代,或者以其他方式循环访问数组?

JavaScript循环迭代是同步的,并且在您的代码中,您将始终在调用resolve之前完成循环。

请注意,JavaScript也是单线程的,所以把它放在承诺中不会让它在后台运行。 在这个循环执行的过程中,用户界面仍然会有一段时间没有响应用户。

您可以使用networking工作者将一些计算转移到后台进程。

另外:当第一个项目被find时,你能退出循环吗? 如果没有,为什么不反向迭代(使用for循环,而不是数组反转),并find第一个项目时退出? 在最坏的情况下,技术上仍然是O(N),但最好的情况是O(1),如果你尽快撤出。

不过为了更有帮助,您需要提供更多关于正在发生的事情的信息。 我会build议在http://jsfiddle.net/上放一个小例子 – 这本身可以是一个有用的练习。