我如何从被拒绝的诺言中“抛出”内部的“捕获”方法,以由外部“捕获”模块处理?

问题描述 投票:1回答:1

这正在工作!

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)); ...

javascript node.js error-handling try-catch throw
1个回答
0
投票

如注释中所指出,如果您在.catch()函数内部,则无需使用async。我不知道为什么要嵌套try...catch,但是看起来这可以实现您想要的:

© www.soinside.com 2019 - 2024. All rights reserved.