这正在工作!
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
关键字,则不会起作用。)>
EXTRA:
在Node中,我得到了这个(即使有一个catch块):
UnhandledPromiseRejectionWarning:
未处理的承诺拒绝。该错误是由于在没有catch块的情况下抛出异步函数而产生的,或者是由于拒绝了未经处理的诺言而产生的。抓住()。 (拒绝ID:1)
这正在工作!函数rejectedPromise(){返回Promise.reject(“ ERROR”); }异步函数someFunction(){试试{rejectedPromise().catch((err)=> console.log(err)); ...
如注释中所指出,如果您在.catch()
函数内部,则无需使用async
。我不知道为什么要嵌套try...catch
,但是看起来这可以实现您想要的: