我正在尝试清理异步函数的输入。具体来说,给定一个API的凭证列表,我试图通过向API发送测试请求并检查每个API的结果来过滤掉哪些无效。
我面临的问题是:我想将无效密钥收集到一个列表中。我通常会使用async
库来使用series
函数按顺序执行请求。但是,从文档:
如果系列中的任何函数将错误传递给其回调,则不再运行任何函数,并立即使用错误值调用
callback
。
这不是理想的行为:我想收集错误代替响应(或两者都有)。这是可能的,使用这个库,而不改变我与API交互的方式吗?
答案 0 :(得分:2)
这个问题的解决方案最终变成了一种hacky,但它运行正常。我有一个credentials
列表和一个异步函数apiCall
,看起来像这样:
var apiCall = function(arg, callback){
...
}
并且解决方案是使用mapSeries
中的async
,但是翻转回调参数,如下所示:
async.mapSeries(credentials, function(creds, callback){
apiCall(creds, function(err, res){
callback(null, err);
});
},
function(nil, errors){
console.log(_.compact(errors));
});
其中_.compact
从数组中删除了伪元素,删除了返回非错误响应的null
。这让我得到了我正在寻找的东西。