2015-02-06 83 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描述。

相關問題