Javascript /节点检查一个循环callback完成

存在某种方法来知道node.js(js)中的asynchronous循环是否完成了执行新函数或发送callback的最后一个过程?

你需要使用recursion:

do = function(i, data, callback){ // if the end is reached, call the callback if(data.length === i+1) return callback() obj = data[i] doAsync(function(){ // DO SOMETHING i++; // call do with the next object do(i, data, callback) }); } do(0, [a, b, c], function(){ THEN DO SOMETHING }); 

因此,同样的callback将被传递,当到达结束时,callback将被执行。 这个方法很干净,例如,如果你需要抓取50个页面,每个页面将被加载到一个队列中,等待另一个完成之前。

使用这个function

 | google.com | yahoo.fr | SO.com | github.com | calling callback! | (856ms) | (936ms) | (787ms) | (658ms) | 

没有

 | google.com (1056ms) | | yahoo.fr (1136ms) | | SO.com (987ms) | | github.com (856ms) | 

因此,另一种方法是统计asynchronous函数应该被调用多less次,每次结束时,你增加一个var,当var达到这个长度时,调用callback函数。

 do = function(data, callback){ var done = 0; data.forEach(function(i, value){ doAsync(function(){ done++; if(done === data.length) callback() }); }); } do(0, [a, b, c], function(){ THEN DO SOMETHING }); 

那就是了

 | google.com (1056ms) | | yahoo.fr (1136ms) | calling callback! | SO.com (987ms) | | github.com (856ms) | done = 0 1234 

看看这个图书馆。 看来每个迭代器都适合你的需求。