这很有效
function rejectedPromise() {
return Promise.reject("ERROR");
}
async function someFunction() {
try {
rejectedPromise()
.catch((err) => console.log(err)); // IT WORKS ! THE ERROR IS BEING LOGGED HERE
}
catch(err) {
console.log(err);
}
}
someFunction();
事实并非如此
function rejectedPromise() {
return Promise.reject("ERROR");
}
async function someFunction() {
try {
rejectedPromise()
.catch((err) => { throw err; }); // CAN'T I THROW HERE ?
}
catch(err) {
console.log(err); // DOES NOT WORK. THE ERROR SHOULD BE LOGGED HERE
}
}
someFunction();
问题
为什么?
注意:我的目标是throw
来自被拒绝的Promise的catch
方法的错误,throw
它,所以它由外部catch
块处理。不知道这是否重要,但这是在async
函数内部发生的(如果我从示例中删除async
关键字,它就不起作用(。
额外:
在Node中,我得到了这个(即使有一个捕获块(:
未处理的PromiseRejection警告:未经处理的promise rejection。这个错误要么是由于在没有catch块的异步函数内部抛出,要么是由于拒绝了未使用处理的promise.catch((。(拒绝id:1(
正如注释中所指出的,如果您在async
函数中,则不需要使用.catch()
。我不知道你为什么想要嵌套的try...catch
,但看起来这会实现你想要的:
function rejectedPromise() {
return Promise.reject("ERROR");
}
async function someFunction() {
try {
try {
await rejectedPromise()
}
catch(err) {
throw err;
}
}
catch(err) {
console.log(err);
}
}
someFunction();