ES6 Promise对象catch方法

2023-05-23 09:26:30 浏览数 (1)

工作原理

Promise对象的.catch()方法用于处理Promise链中的错误。当Promise链中的某个Promise对象被拒绝时,控制权会传递到最近的.catch()方法,以便处理该错误。.catch()方法返回一个新的Promise对象,因此您可以在后续的.then()方法中继续链式调用。

.catch()方法可以捕获来自之前Promise对象的错误,并对这些错误进行处理或传递给下一个.catch()方法。如果没有显式地使用.catch()方法来处理错误,错误将被传递到Promise链的下一个可用.catch()方法,或者如果没有更多的.catch()方法,则错误将触发全局错误处理程序。

语法

以下是ES6 Promise对象.catch()方法的基本语法:

代码语言:javascript复制
promise.catch(onRejected);
  • promise:一个Promise对象,用于捕获错误。
  • onRejected:一个回调函数,用于处理被拒绝的Promise的错误。它接受一个参数,即拒绝原因。

.catch()方法还可以与.then()方法一起链式调用,例如:

代码语言:javascript复制
promise
  .then(onFulfilled)
  .catch(onRejected);

在这种情况下,.catch()方法将在前面的.then()方法中发生任何错误时触发。

示例

让我们通过一些示例来理解ES6 Promise对象的.catch()方法的使用。

示例1:处理Promise链中的错误

代码语言:javascript复制
function asyncOperation() {
  return new Promise((resolve, reject) => {
    // 执行异步操作
    // 如果操作成功,调用resolve并传递结果
    // 如果操作失败,调用reject并传递错误信息
    reject(new Error('操作失败'));
  });
}

asyncOperation()
  .then((result) => {
    console.log('操作成功:', result);
  })
  .catch((error) => {
    console.error('操作失败:', error);
  });

在上面的示例中,我们定义了一个asyncOperation函数,它返回一个Promise对象。在Promise的执行器函数中,我们使用reject方法模拟一个操作失败的情况,并传递一个错误信息。

然后,我们通过调用asyncOperation函数来执行异步操作。使用.then()方法,我们处理操作成功的情况。使用.catch()方法,我们捕获并处理操作失败的情况。在本例中,由于操作被拒绝,控制权传递到了.catch()方法,我们打印出了错误信息。

示例2:链式调用多个.catch()方法

代码语言:javascript复制
function asyncOperation1() {
  return new Promise((resolve, reject) => {
    resolve('操作1成功');
  });
}

function asyncOperation2() {
  return new Promise((resolve, reject) => {
    reject(new Error('操作2失败'));
  });
}

asyncOperation1()
  .then((result) => {
    console.log('操作1成功:', result);
    return asyncOperation2();
  })
  .catch((error) => {
    console.error('操作1或操作2失败:', error);
    throw new Error('抛出新错误');
  })
  .catch((error) => {
    console.error('捕获到新错误:', error);
  });

在这个示例中,我们定义了两个异步操作函数asyncOperation1asyncOperation2asyncOperation1成功地解决了Promise对象,而asyncOperation2被拒绝了。

我们在.then()方法中链式调用了两个操作,当第一个操作成功时,我们执行第二个操作。在第一个.catch()方法中,我们捕获了操作1或操作2失败的错误,并抛出了一个新的错误。

然后,我们在第二个.catch()方法中捕获了新的错误。在这个示例中,通过使用多个.catch()方法,我们可以在Promise链中的不同阶段捕获和处理错误。

0 人点赞