gpt4 book ai didi

javascript - 以下代码是否等待 forEach 完成

转载 作者:搜寻专家 更新时间:2023-11-01 00:43:29 24 4
gpt4 key购买 nike

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

我使用 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 循环之后的代码等待循环完成迭代,或者以其他方式循环遍历数组?

最佳答案

JavaScript 循环迭代是同步的,在您的代码中,您总是会在调用 resolve 之前完成循环。

请注意,JavaScript 也是单线程的,因此将其放入 promise 中不会使其在后台运行。在此循环执行期间,仍然会有一段时间 UI 不响应用户。

您可以使用 web workers 将一些计算卸载到后台进程.

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

但是,为了提供更多帮助,您需要提供有关正在发生的事情的更多信息。我建议在 http://jsfiddle.net/ 上放一个小例子-- 这本身就是一个有用的练习。

关于javascript - 以下代码是否等待 forEach 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26744790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com