文章目录
promise
在 Axios 中,Promise
是一种用于异步编程的设计模式。它提供了一种更优雅的方式来处理异步请求的结果,让代码的逻辑更加清晰,promise
代表了一个尚未完成但预期将来会完成的操作的最终结果。
promise的构造
创建一个Promise
对象时要接受两个参数,resolve
和reject
这两个构造函数。
- 如果HTTP请求成功,服务器返回了数据,那么你可以调用
resolve
函数,并将数据作为参数传递给它。 - 如果HTTP请求失败了,比如服务器返回了一个错误,那么你可以调用
reject
函数,并将错误信息作为参数传递给它。
三个实例方法
then
方法:用于指定当Promise
对象状态变为fulfilled
时要执行的操作。 它接收两个参数:一个是当Promise
对象成功时要执行的回调函数,另一个是当Promise
对象失败时要执行的回调函数。catch
方法用于指定当Promise
对象状态变为rejected
时要执行的操作。它只接收一个参数,即当Promise
对象失败时要执行的回调函数。finally
方法用于指定无论Promise
对象最后状态如何,都会执行的操作。它接收一个回调函数作为参数。
链式调用
链式调用:将多个异步操作串联起来,形成一个线性的执行顺序。在链式调用中,每个 Promise 的成功结果(通过 resolve
函数)可以直接传递给下一个 Promise,而错误(通过 reject
函数)可以被 .catch()
方法捕获和处理。
// 将异步函数转换为返回 Promise 的形式
function getUser() {
return new Promise((resolve, reject) => {
setTimeout(() => {
if(true){
resolve({ name: 'Alice' })
}else{
reject('1')
}
}, 1000);
});
}
function sendEmail(user) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if(false){
console.log(`Sending email to ${user.name}`);
resolve('Email sent');
}else{
reject('2');
}
}, 500);
});
}
function saveLog(message) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`Log saved: ${message}`);
resolve('Log saved');
}, 500);
});
}
getUser()
.then(user => sendEmail(user))
.then(emailResult => saveLog(emailResult))
.then(logResult => console.log('All tasks completed'))
.catch(error => console.error(error));