javascript——我正在浏览承诺的mdn文档,并给出了一个我无法理解的示例有人能给我解释一下流程吗

az31mfrm  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(274)

承诺得到解决,然后运行,然后在catch块运行之后抛出一个被拒绝的承诺,那么为什么另一个在后面运行呢?我无法理解它背后的流程,它是否也能捕捉到回报的新承诺?
代码-

Promise.resolve()
  .then(() => {
    // Makes .then() return a rejected promise
    throw new Error('Oh no!');
  })
  .catch(error => {
    console.error('onRejected function called: ' + error.message);
  })
  .then(() => {
    console.log("I am always called even if the prior then's promise rejects");
  })

输出-我总是被呼叫,即使先前的承诺被拒绝
函数名为:哦,不!

kpbwa7wx

kpbwa7wx1#

二者都 then()catch() 方法返回承诺,它们返回的承诺取决于两件事:
最初的承诺会发生什么变化?
它们的回调函数返回什么?
最后 then() 方法对 catch() 方法和作为 catch() 方法在代码中隐式返回未定义的承诺,即 catch() 方法的值解析为 undefined 然后调用 then() 方法。
如果要停止执行最后一个 then() 方法,则需要拒绝 catch() 方法。这可以通过重新引用错误或返回被拒绝的承诺来实现。
您的代码执行如下所述: Promise.resolve() 返回已解决的承诺
步骤1中的已解决承诺导致调用 Promise.resolve().then(...) 方法的回调函数
作为的回调函数 Promise.resolve().then(...) 抛出一个错误,由 then() 方法被拒绝,错误对象作为拒绝原因。
作为承诺的回报 then() 步骤2中的方法被拒绝,它将导致调用 catch() 方法的回调函数。
函数的回调函数 catch() 方法记录错误
因为在的回调函数中没有显式的return语句 catch() 方法,则回调方法隐式返回 undefined .
政府的承诺 catch() 方法使用其回调函数的返回值进行解析,即。 undefined 作为承诺的回报 catch() 方法,它调用最后一个 then() 方法

相关问题