Promise的链式调用

1/29/2023

JavaScript Promise是一种用于异步编程的技术,可以更加优雅和简单地处理异步操作。在使用Promise时,我们经常需要对多个Promise对象进行链式调用,以便依次处理它们返回的结果。在本文中,我们将介绍Promise的链式调用方式和相关方法。

# then()方法的链式调用

Promise对象的then()方法用于在Promise对象成功时调用一个回调函数。then()方法可以被多次调用,这种方式被称为Promise的链式调用。在链式调用中,每个then()方法都会返回一个新的Promise对象,从而允许我们在Promise对象之间建立一个依赖关系。

例如,我们可以通过以下方式创建一个Promise对象:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Hello, world!');
  }, 2000);
});
1
2
3
4
5

然后我们可以通过链式调用的方式添加多个then()方法

promise.then((result) => {
  console.log(result);
  return result.toUpperCase();
}).then((result) => {
  console.log(result);
});
1
2
3
4
5
6

在上面的代码中,第一个then()方法在Promise成功时打印出Promise的结果,并将结果转换为大写字母,然后返回一个新的Promise对象。第二个then()方法接收上一个then()方法返回的Promise对象,并在其成功时打印出结果。

# catch()方法的链式调用

Promise对象的catch()方法用于在Promise对象发生错误时调用一个回调函数。catch()方法也可以被多次调用,以便建立一个错误处理的依赖关系。

例如,我们可以通过以下方式创建一个Promise对象:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject(new Error('Something went wrong!'));
  }, 2000);
});
1
2
3
4
5

然后我们可以通过链式调用的方式添加多个catch()方法

promise.catch((error) => {
  console.error(error.message);
  throw error;
}).catch((error) => {
  console.error('Something else went wrong!');
});
1
2
3
4
5
6

在上面的代码中,第一个catch()方法在Promise发生错误时打印出错误消息,并将错误重新抛出。第二个catch()方法接收上一个catch()方法抛出的错误,并打印出另一个错误消息。

# finally()方法的链式调用

Promise对象的finally()方法用于在Promise对象完成(无论是成功还是失败)时调用一个回调函数。finally()方法也可以被多次调用,以便建立一个回调函数的依赖关系。

例如,我们可以通过以下方式创建一个Promise对象:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Hello, world!');
  }, 2000);
});
1
2
3
4
5

然后我们可以通过链式调用的方式添加多个finally()方法

promise.finally(() => {
  console.log('Promise completed!');
}).finally(() => {
  console.log('All done!');
});
1
2
3
4
5

在上面的代码中,两个finally()方法都在Promise完成后

编辑时间: 4/12/2023, 5:05:20 PM