【发布时间】:2017-10-03 16:09:41
【问题描述】:
我正在尝试使用 bluebird 的 Promise.each() 进行多个数据库查询。我被卡住的部分是我无法处理所有的拒绝(如果多个承诺失败)。如果我使用 Promise.all() 做同样的事情,它可以正常工作(它会!因为在 Promise.all() 中,如果 1 个承诺失败,结果也会被拒绝)。我的问题是: 我应该如何处理 Promise.each() 中的拒绝?
function foo(bar){
return new Promise(resolve, reject){
var query = "elect count(*) from students Where 1=1";//DELIBRATE MISTAKE
connection.query(query, function(err, result){
if(err){reject(err)}resolve(result);
})
}
}
function api(req, res){
var tasks = [];
for(var i = 0; i < 10; i++){
tasks.push(foo(bar));
}
Promise.each(tasks).catch(err=>{return err;});
res.send('message')
}
回应:
Unhandled rejection Error: ER_PARSE_ERROR
【问题讨论】:
-
我能想到的是对于第一次拒绝,catch 会处理拒绝并返回错误。但是对于随后的拒绝,没有人能抓住它们。
-
foo不返回承诺。reject和resolve是在哪里定义的? -
@alexmac 错误,已更正。只是在这里写了一个例子。
-
您的意思是
Promise.all(接受一系列承诺)而不是Promises.each? -
我想要的只是一个系列 Promise.all
标签: javascript node.js promise bluebird