2015-02-06 84 views
2

我正在尝试使用节点的模块“异步”,其方法为'each',以便使用array.forEach的异步版本。问题在于它没有按预期工作,因为它从不执行回调函数,我将它作为第三个参数传递。节点的模块异步无法按预期方式工作

下面的代码:

var async = require('async'); 

var arr = [1,2,3,4,5,6,7,8,9,10]; 

async.each(arr, function(element, cb){ 
    console.log(element); 
}, function(err){ 
    console.log("Done"); 
}); 

事实上,我从来没有计划打印“完成”,即使它完成整个数组循环。

你有什么想法吗?

回答

1

这是因为你没有在第二个参数中触发回调。

var async = require('async'); 

var arr = [1,2,3,4,5,6,7,8,9,10]; 

async.each(arr, function(element, cb){ 
    console.log(element); 
    cb(); // You were missing this 
}, function(err){ 
    console.log("Done"); 
}); 

这导致:

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
Done 
+0

感谢您的快速回答。但是这个回调有什么意义呢?只是一个实施问题? – 2015-02-06 21:12:59

+0

由于javascript的异步特性,您必须将控制流向前传递。 – Seth 2015-02-06 21:20:00

1

你需要调用由异步提供的回调函数来触发结果的功能,如:

var async = require('async'); 

var arr = [1,2,3,4,5,6,7,8,9,10]; 

async.each(arr, function(element, cb){ 
    console.log(element); 
    cb(); 
}, function(err){ 
console.log("Done"); 
}); 

正如async docs描述。

相关问题