【发布时间】:2015-05-30 00:09:25
【问题描述】:
所以我在一个脚本中使用了request-promise,该脚本循环了一个url列表和请求触发。然后我想在所有请求完成后对收到的数据做一些事情。
我有以下几点:
var rp = require('request-promise');
rp.get({
uri: 'http://httpstat.us/500',
transform: function(body, res){
res.data = JSON.parse(body);
return res;
}
}).then(function(res){
results.push(res.data);
})
.catch(function(err){
should.throw.error.to.console();
var respErr = JSON.parse(err.error);
var errorResult = {
origUrl: respErr.origUrl,
error: respErr
};
results.push(errorResult);
});
如您所见.. http://httpstat.us/500 抛出 500,这会导致运行 .catch() 块。我在强迫一个错误。 should.throw.error.to.console(); 应该向控制台抛出一个错误,但脚本只是静默退出,没有任何错误代码 (Process finished with exit code 0)。
我假设 request-promise 正在从节点的 http 捕获错误,当页面没有返回 2xx 代码时,然后将其传递回 catch() 回调。但是任何后续错误最终都会默默地失败。我到底该如何处理这个问题,以便我的其余代码仍能正确抛出错误?
相关GitHubissue
【问题讨论】:
-
是什么让你认为这里的任何东西都会向控制台抛出错误?
-
在我的实际代码中(不是上面的示例),我有一个
Q.all(),一旦我的所有请求完成就会触发.. 在那,我打电话给一个发送所有结果的电子邮件在一封电子邮件中。由于滥用.catch(),我在随后的代码中有一个致命的JS错误导致脚本静默失败。请参阅下面接受的答案和相关的 GitHub 对话,了解为什么会这样。
标签: javascript node.js promise