【发布时间】:2013-02-16 05:00:58
【问题描述】:
我在双 forEach 循环中进行一些计算,如下所示:
array.forEach(function(element){
Object.keys(element).forEach(function(key){
/* some complex computations with asynchronous callbacks */
});
});
someFunctionHere();
有没有办法让循环在执行someFunctionHere( ) 函数之前先完成?或者程序在继续someFunctionHere( )之前知道循环是否完成的任何方式...
我可能错过了一些论坛,但我发现的那些并没有帮助我实现我想要实现的目标,顺便说一下我在 NodeJS 中这样做的方式,我也在问是否有现有的库可以实现这一点。
我忘了添加这个还是应该是另一个问题?
有没有办法同步进行迭代,只有在当前迭代完成后才会进行下一次迭代? (对不起)
感谢您的帮助...
【问题讨论】:
-
是的,基本上100%保证“someFunctionHere”会在异步操作完成之前被调用。
-
关于您的编辑:Golo 的回答显示了如何使用 async.js 来做您想做的事。 (我相信
Clumpy.js也可以用于此。)我的回答显示了如果由于某种原因您不能(或根本不想)使用第三方库,您如何“推出自己的”解决方案。 -
我已经使用 async.forEach() 完成了上述问题,但它弄乱了我的数据库,因为迭代不是一次调用一个迭代(或者如果迭代是同步完成的,我可能会遇到逻辑错误在代码中),所以 Golo 的答案可能与我在 asyn.forEach() 中所做的相同,我的意思是从术语“异步”来看,迭代不是同步完成的吗?
-
或者它可以一次完成一个但不等待当前迭代完成后再进行下一个迭代,对吗?
标签: javascript node.js