2016-06-16 146 views
0

我有幾個函數可以並行執行。使用async.parallel()可以正常工作,但在收到錯誤時執行主回調。使用回調節點異步並行

由於功能是獨立的,我仍然希望來自其他人的結果,即使有錯誤。

這是我目前的代碼。我的需求是否有另一個async函數?

var async=require('async'); 
async.parallel({ 
    one:function(callback) 
    { 
     callback(null,1); 
    }, 
    two:function(callback) 
    { 
     callback("ERROR Occured"); 
    }, 
    three:function(callback) 
    { 
     callback(null,3); 
    }, 
    four:function(callback) 
    { 
     callback(null,4); 
    } 
},function(err,result) 
{ 
    console.log(err); 
    console.log(result); 
}); 
+0

如果您沒有使用錯誤參數調用回調,那麼在執行所有函數之前不會調用最終回調函數。即使這是一個錯誤,只需在上面調用時使用null調用即可。問題是什麼? –

+0

我也想收集錯誤信息 –

回答

0

您可以使用reflectAll

var async = require('async'); 

async.parallel(async.reflectAll([ 
    function(callback) { 
    callback(null,1); 
    }, 
    function(callback) { 
    callback("ERROR Occured"); 
    }, 
    function(callback) { 
    callback(null,3); 
    }, 
    function(callback) { 
    callback(null,4); 
    } 
]), function(err,result) { 
    console.log(err); 
    console.log(result); 
}); 

這是如何工作的解釋here

包裝在另一個函數的函數,總是即使返回數據時,它的錯誤。返回的對象具有屬性errorvalue

+0

它是一個很好的選擇,但我將不得不執行額外的操作來爲每個對象提取'error'的'value'值,並使用像'one'' two'這樣的鍵來形成另一個數組' '三''連同價值和錯誤。 而不是做所有這些,我可能只是在外部作用域中使用一個數組,並推動它中的錯誤 –