1、Promise简介
Promise是异步编程的一种解决方案,解决多个串联的异步操作形参的回调地狱;Promise本身是同步的,他的then方法、catch方法和finally方法是异步的
Promise有3中状态:
- pending:进行中
- fulfilled:已成功
- rejected:已失败
特点:
- 状态不受外界的影响,只有异步操作的结果,决定当前是哪一种状态;
- 一旦状态改变就不会再变(pending–>fulfilled;pending—>rejected)
用法:
Promise是一个构造函数,用来生成Promise实例;
Promise构造函数接收一个函数作为参数,这个函数有两个参数(resolve,reject);
resolve:将Promise对象的状态从未完成变成成功,在异步操作成功的时候调用;
reject:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用;
const p = new Promise((resolve, reject) => {
//resolve函数:将Promise对象的状态从未完成变成成功,在异步操作成功的时候调用
resolve();//返回异步操作成功的结果,将结果作为参数传递出去
//reject函数:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用
reject();//返回异步操作失败的结果,将结果作为参数传递出去
})
2、Promise的实例方法
const p = new Promise((resolve, reject) => {
setTimeout(() => {
let time = new Date().getTime();
if (time % 2 === 0) {
resolve("成功的数据,time=" + time)
} else {
reject("失败的数据,time=" + time)
}
})
})
- then( ): 当实例方法状态发生改变的时候的回调函数,
返回的是一个新的Promise实例
,也就是Promise可以链式书写的原因;
p.then((value) => {
console.log("成功的", value);
}), (reason) => {
console.log("失败的", reason);
}
- catch( ): 用来指定发生错误的回调函数,因为Promise的使用then来返回错误,具有冒泡性质,所以在开发中一般来说通过catch来替代then中第二个参数,用于捕获错误;
p.then((value) => {
console.log("成功的", value);
}).catch(value => {
//catch( ):用来指定发生错误的回调函数
console.log("失败的结果", value);
})
- finally( ): 不管Promise对象最后的状态如何,都会执行的操作;
p.then((value) => {
console.log("成功的", value);
})/*, (reason) => {
console.log("失败的", reason);
}*/
.catch(value => {
//catch( ):用来指定发生错误的回调函数
console.log("失败的结果", value);
}).finally(()=>{
console.log("不管Promise对象最后的状态如何,都会执行的操作");
})