【发布时间】:2013-11-19 22:09:33
【问题描述】:
我正在编写一个带有非常长时间运行的 foreach 循环的 javascript 程序,如下所示:
for (property in object) {
difficultTask();
}
我看到您可以使用setTimeout 做一些事情,这可以让您定期将控制权返回给浏览器;但是,我还没有看到任何能够使用 foreach 循环执行此操作的方法,只有带有索引的 for 循环。此外,这些任务不能异步完成,因为每次迭代都依赖于前一次迭代的结果。
我能想到的一个解决方案是将我的对象拆分为许多较小的对象并遍历它们中的每一个,在每个对象之间设置一个超时,但我想看看这是否可能不诉诸那个。
有没有办法在不彻底改变我拥有对象的方式的情况下做到这一点?
【问题讨论】:
-
是迭代需要一段时间还是
difficultTask?换句话说,您是否拥有大量的属性,或者您是否在功能上运行循环。 -
如果您运行代码的环境支持
Object.keys,您可以使用它将for...in循环转换为for循环并应用您之前见过的方法。跨度> -
@zamnuts 不幸的是,两者兼而有之。
-
你可以把你的代码放在一个 web worker 中。这里的 is "difficultTask" 到底是什么?任何计算时间长到足以在现代计算机上引起浏览器警告的东西要么是某种粒子物理实验,要么是一种损坏/错误的算法。
-
@Pointy 这是一项大型 NLP 任务
标签: javascript foreach