当前位置: 首页 > 面试题库 >

不能从异步Promise执行器函数中引发错误

闻人举
2023-03-14
问题内容

我一直在试图从概念上理解以下代码为何无法捕获throw。如果asyncnew Promise(async (resolve, ...零件中删除关键字,则它可以正常工作,因此它与Promise执行程序是异步函数这一事实有关。

(async function() {

  try {
    await fn();
  } catch(e) {
    console.log("CAUGHT fn error -->",e)
  }

})();

function fn() {

  return new Promise(async (resolve, reject) => {
    // ...
    throw new Error("<<fn error>>");
    // ...
  });

}

答案重复为:“如果您在任何其他异步回调中,则必须使用reject”,但是通过“异步”,它们不是在引用async函数,因此,我认为它们的解释在此处不适用(如果他们这样做,我不知道怎么做。

如果代替throw我们使用reject,上述代码可以正常工作。我想 从根本 上理解为什么throw在这里不起作用。谢谢!


问题答案:

这是Promise构造函数antipattern的async
/ await版本!

从来没有过使用asyncfunction作为一个Promise执行程序功能(即使你可以把它工作1)!

[1:通过调用resolvereject不是使用returnand throw语句]

通过“异步”他们不是指async功能,所以我认为他们的解释在这里不适用

他们也可以。一个简单的例子就 不能 工作

new Promise(async function() {
    await delay(…);
    throw new Error(…);
})

相当于

new Promise(function() {
    return delay(…).then(function() {
        throw new Error(…);
    });
})

现在清楚的throw是,它位于异步回调中。

Promise构造也只能望尘莫及 _同步_异常,和一个async function 不会抛出
-它总是会返回一个承诺(这可能会遭到拒绝,虽然)。当promise正在等待resolve被调用时,该返回值将被忽略。



 类似资料:
  • 问题内容: 我一直在试图从概念上理解以下代码为何无法捕获。如果从零件中删除关键字,则它可以正常工作,因此它与Promise执行器是异步函数这一事实有关。 如果代替我们使用,则上面的代码可以正常工作。我想 _从根本_上理解为什么在这里不起作用。谢谢! 问题答案: [1:通过调用而不是使用and 语句] 通过“异步”,它们不是指功能,所以我认为它们的解释在这里不适用 他们也可以。一个简单的例子就 不能

  • 我一直试图从概念上理解为什么下面的代码没有抓住抛出的代码。如果您从部分删除关键字,那么它工作正常,所以它与Promise执行器是一个异步函数的事实有关。 这里、这里和这里的答案都重复了“如果你在任何其他异步回调中,你必须使用”,但是“异步”并不是指函数,所以我认为他们的解释不适用于这里(如果他们这样做,我不明白怎么做)。 如果我们使用拒绝代码而不是抛出代码,上面的代码可以正常工作。我想从根本上理解

  • 我有一个异步函数,它将一些数据插入数据库(使用Mariadb)。由于重复的唯一键,此插入可能会失败,因此它会抛出错误(实际上确实如此),但当我尝试再次抛出它以通过Promise捕获它时,它不起作用;它似乎总是以成功的案例结束,即使它抛出了错误。 我尝试改变then/catch顺序,我使用了< code > reject(err);而不是< code >抛出err但是这些都不起作用。 这是POST声

  • 问题内容: 假设我有这段代码 我想知道的是该函数是否将异步执行。 问题答案: 设完成为Call(执行者,未定义,«resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]»)。 如果完成是突然完成,则 令status为Call(resolvevingFunctions。[[Reject]],undefined,«completion。

  • 问题内容: 我做了这个触发器,在将行插入表TEST_TRNCOMPVISIT时,出现以下错误- 发生以下错误: ORA-04091:表TEST.TEST_TRNCOMPVISIT正在变异,触发器/函数可能看不到它 ORA-06512:在“ TEST.UPDATE_TEST_280510”,第4行 ORA-06512:在“ TEST.UPDATE_TEST_280510”,第10行 ORA-0408

  • 我正在使用编写promise代码。然后现在,我决定使用wait/async编写它。我在promise中调用了一个函数add_,然后在中调用了另一个函数。然后是该函数的一部分。这是我使用的代码。然后 这是使用wait/async的代码。 使用await/async的代码显示了一个错误,即add\u lessons是意外标识符。那么,告诉我如何在promise中定义异步函数?