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);
});
2
3
4
5
然后我们可以通过链式调用的方式添加多个then()方法
:
promise.then((result) => {
console.log(result);
return result.toUpperCase();
}).then((result) => {
console.log(result);
});
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);
});
2
3
4
5
然后我们可以通过链式调用的方式添加多个catch()方法
:
promise.catch((error) => {
console.error(error.message);
throw error;
}).catch((error) => {
console.error('Something else went wrong!');
});
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);
});
2
3
4
5
然后我们可以通过链式调用的方式添加多个finally()方法
:
promise.finally(() => {
console.log('Promise completed!');
}).finally(() => {
console.log('All done!');
});
2
3
4
5
在上面的代码中,两个finally()方法
都在Promise完成后