2013-11-22 31 views
2

代碼段:NodeJS異步模塊:如何在回調中獲取結果對象?

var async = require("async"); 

async.map([ 
    "a", 
    "b", 
    "c" 
], function(thing, callback) { 
    console.log(thing + "-something"); 
    callback(); 
}, 
function(err, results){ 
    if (err) return console.error(err); 
    console.log(results); 
}); 

我現在的結果:

a-something 
b-something 
c-something 
[ undefined, undefined, undefined ] 

我想要的結果:

[ a-something, b-something, c-something ] 

難道你們告訴我,我得到了?我如何訪問回調中的結果對象?

回答

4

您需要將結果傳遞到callback()作爲第二個參數(第一個參數應是錯誤,如果有的話):

var async = require("async"); 

async.map([ 
    "a", 
    "b", 
    "c" 
], function(thing, callback) { 
    var returnValue = thing + "-something"; 
    console.log(returnValue); 
    callback(null, returnValue); 
}, 
function(err, results){ 
    if (err) return console.error(err); 
    console.log(results); 
}); 
+0

這工作!感謝Oleg。我想再打擾一個問題,我是JavaScript和節點的新手,我發現文檔難以閱讀。如何在沒有任何參數被傳入的情況下使用callback()也能起作用。請問我可以參考顯示回調的文檔(null,returnValue) – samol

+0

@SidneySidaZhang:這是您應該查看的文檔部分:https ://github.com/caolan/async#maparr-iterator-callback。 callback()也適用的原因是因爲JavaScript對傳遞給函數的參數數量並不嚴格(任何未傳遞的參數都被視爲未定義的)。異步庫遵循訴訟,並選擇放寬要求的參數,所以如果你不傳入任何東西,它假定沒有錯誤,並且像你看到的那樣,將未定義的數據傳遞給最後一個回調函數。 –

+0

非常感謝! – samol