我可以指定如何处理异步javascript库中的错误吗?
我正在尝试清理异步函数的输入。具体地说,给定API的凭据列表,我试图通过向API发送测试请求并检查每个证书的结果来筛选出哪些证书无效 我面临的问题是:我想将无效密钥收集到一个列表中。我通常使用我可以指定如何处理异步javascript库中的错误吗?,javascript,node.js,error-handling,async.js,Javascript,Node.js,Error Handling,Async.js,我正在尝试清理异步函数的输入。具体地说,给定API的凭据列表,我试图通过向API发送测试请求并检查每个证书的结果来筛选出哪些证书无效 我面临的问题是:我想将无效密钥收集到一个列表中。我通常使用async库,使用series函数按顺序执行请求。但是,从文件中可以看出: 如果序列中的任何函数将错误传递给其回调函数,则不会再运行更多函数,并且会立即使用错误值调用callback 这不是期望的行为:我希望收集错误来代替响应(或两者)。使用这个库,在不改变与API交互方式的情况下,这可能吗?这个问题的解决
async
库,使用series
函数按顺序执行请求。但是,从文件中可以看出:
如果序列中的任何函数将错误传递给其回调函数,则不会再运行更多函数,并且会立即使用错误值调用callback
这不是期望的行为:我希望收集错误来代替响应(或两者)。使用这个库,在不改变与API交互方式的情况下,这可能吗?这个问题的解决方案最终有点粗糙,但效果很好。我有一个
凭证的列表
和一个异步函数apiCall
,看起来像这样:
var apiCall = function(arg, callback){
...
}
async.mapSeries(credentials, function(creds, callback){
apiCall(creds, function(err, res){
callback(null, err);
});
},
function(nil, errors){
console.log(_.compact(errors));
});
解决方案是使用async
中的mapSeries
,但翻转回调参数,如下所示:
var apiCall = function(arg, callback){
...
}
async.mapSeries(credentials, function(creds, callback){
apiCall(creds, function(err, res){
callback(null, err);
});
},
function(nil, errors){
console.log(_.compact(errors));
});
其中
.compact
从数组中删除falsy元素,去掉非错误响应返回的null
s。这正是我想要的。与其将错误直接传递到回调中,不如在成功回调中传递错误键?虽然这可能与这个库的目的背道而驰,但它改变了我与API交互的方式;我不想仅仅为了应用程序的这一小部分而改变访问所有内容和发送响应的方式。将它们添加到async.series
函数范围之外的数组怎么样?然后,当系列在最终回调中完成时,您可以执行自己喜欢的操作。@BenFortune这不是异步工作的,但我确实找到了一个解决方案--我将在稍后发布。数据发生了什么变化?res
意味着什么,它永远不会包含错误?@Bergires
总是null
(我正在回调中设置它)。在我的特殊情况下,我根本不关心响应是什么,只有当我返回错误时。设置<代码> RES<代码> >代码> null 确保 AsYNC/<代码>永远不会检测到他们会考虑什么“错误”,而是将实际错误传播为他们认为有效的响应。是的,我理解它是如何工作的,但是命名-<代码> RES/COD>(UT/POSE)可能暗示它包含数据。您可以更清楚地表明您放弃了数据
。