首页 > 解决方案 > 无法理解为什么此代码会产生此输出

问题描述

我正在网上做一个反应课程。在函数链接主题之后,有一个 mcq 来预测输出。代码是:

function job() {
  return new Promise(function(resolve, reject) {
    reject();
  });
}

let promise = job();

promise

  .then(function() {
    console.log('Success 1');
  })

  .then(function() {
    console.log('Success 2');
  })

  .then(function() {
    console.log('Success 3');
  })

  .catch(function() {
    console.log('Error 1');
  })

  .then(function() {
    console.log('Success 4');
  });

但是为什么这段代码会Error 1,Success 4作为输出产生呢?

标签: javascript

解决方案


.catch将导致将已解决的 Promise 传递给链的下一步 - 除非.catch处理程序本身抛出。也就是说,给定任何:

.catch(someCallback)
.then(someFn);

除非someCallback抛出错误(这将导致被拒绝的 Promise,这可能会被.catch进一步调用),否则无论情况如何,someFn都将始终运行。

这是许多人选择将.catchs 放在 Promise 链末尾的原因之一——它使控制流更容易理解。


推荐阅读