【发布时间】:2019-10-13 15:10:36
【问题描述】:
我正在使用 Promise.all 并捕获错误,但仍然收到未处理的拒绝
const Promise = require('bluebird');
function sleep(milis) {
return new Promise(function(resolve, reject) {
if (milis == 1000) {
console.log('Rejecting millis', milis)
setTimeout(() => {
reject('Got error')
}, milis);
} else {
console.log('Processing millis', milis)
setTimeout(() => {
resolve(milis);
}, milis);
}
});
}
function test() {
try {
let lists = [2000, 1000, 3000]
Promise.all(
lists.map(record => {
try {
sleep(record)
} catch (err) {
console.log('Error inside catch block1', err)
throw err
}
})
).then(data => {
console.log('Resolved', data)
})
.catch(err => {
console.log('Error inside catch block2', err)
throw err
});
} catch (err) {
console.log('Error inside catch block3', err)
}
}
test();
使用 catch 块后为什么仍然会收到未处理的拒绝。任何帮助表示赞赏。但是如果我使用异步等待不会得到未处理的拒绝。
【问题讨论】:
-
try-catch块不会捕获承诺拒绝,除非您使用async-await
标签: node.js ecmascript-6 promise es6-promise bluebird