【发布时间】:2021-07-30 06:24:08
【问题描述】:
当我运行以下代码时,为什么会收到未处理的 Promise 拒绝警告?
async function load() {
throw new Error('error');
}
async function main() {
const promise = load();
await new Promise(resolve => setTimeout(resolve, 5000));
try {
await promise;
} catch (e) {
console.log('caught error', e);
}
}
main();
这是输出:
jkim@dev-jkim test $ node index.js
(node:25276) UnhandledPromiseRejectionWarning: Error: error
由于await promise 是一个try-catch,我很困惑为什么我的try-catch 没有捕捉到错误。我想这与setTimeout 有关,因为以下代码有效:
async function load() {
throw new Error('error');
}
async function main() {
const promise = load();
try {
await promise;
} catch (e) {
console.log('caught error', e);
}
}
main();
jkim@dev-jkim test $ node index.js
caught error Error: error
这里发生了什么?如果在当前刻度结束时未处理承诺拒绝,是否会自动导致未处理的承诺拒绝警告?
(我在节点 v10.16.3 上)
【问题讨论】:
标签: node.js async-await promise unhandled-promise-rejection