2016-06-16 107 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'这样的键来形成另一个数组' '三''连同价值和错误。 而不是做所有这些,我可能只是在外部作用域中使用一个数组,并推动它中的错误 –