对promise 的理解

发布时间 2023-10-21 18:43:17作者: 踏浪小鲨鱼

对于Promise的.then()方法,其实它接受两个参数。第一个参数是处理resolve状态(即成功状态)的回调函数,第二个参数是处理reject状态(即失败状态)的回调函数。也就是说,如果你提供了.then()的第二个参数,那么它将在Promise被rejected时执行。

然而,一般推荐使用.catch()处理Promise的错误状态,而非.then()的第二个参数。使用.catch()的好处是,它不仅可以捕捉到它之前链式调用中的所有错误,而且排查问题时也更为直观。

这里有一个例子可以帮助你理解:

let promise = new Promise(function(resolve, reject) {
  // 模拟一个错误
  reject("Error!");
});

promise
  .then(
    value => {
      // 成功的回调函数
      console.log("This won't run because the Promise is rejected.");
    }, 
    reason => {
      // 失败的回调函数
      console.log("Something went wrong: ", reason);
    }
  );

在这个例子中,我们创建了一个立即reject的Promise。.then()方法的第一个参数将不会被执行,因为Promise没有被resolve。第二个参数会被执行因为Promise被reject了,它将打印出"Something went wrong: Error!"。

需要注意的是,如果.then()中的第一个回调函数(即处理resolve状态的回调函数)在执行过程中出现错误,那么这个错误是无法被.then()中的第二个回调函数捕获的,但是可以被随后的.catch()捕获。