Promise是异步编程的一种解决方案,解决多个串联的异步操作形参的回调地狱;Promise本身是同步的,他的then方法、catch方法和finally方法是异步的
Promise有3中状态:
特点:
用法:
Promise是一个构造函数,用来生成Promise实例;
Promise构造函数接收一个函数作为参数,这个函数有两个参数(resolve,reject);
resolve:将Promise对象的状态从未完成变成成功,在异步操作成功的时候调用;
reject:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用;
const p = new Promise((resolve, reject) => {
//resolve函数:将Promise对象的状态从未完成变成成功,在异步操作成功的时候调用
resolve();//返回异步操作成功的结果,将结果作为参数传递出去
//reject函数:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用
reject();//返回异步操作失败的结果,将结果作为参数传递出去
})
const p = new Promise((resolve, reject) => {
setTimeout(() => {
let time = new Date().getTime();
if (time % 2 === 0) {
resolve("成功的数据,time=" + time)
} else {
reject("失败的数据,time=" + time)
}
})
})
返回的是一个新的Promise实例
,也就是Promise可以链式书写的原因;p.then((value) => {
console.log("成功的", value);
}), (reason) => {
console.log("失败的", reason);
}
p.then((value) => {
console.log("成功的", value);
}).catch(value => {
//catch( ):用来指定发生错误的回调函数
console.log("失败的结果", value);
})
p.then((value) => {
console.log("成功的", value);
})/*, (reason) => {
console.log("失败的", reason);
}*/
.catch(value => {
//catch( ):用来指定发生错误的回调函数
console.log("失败的结果", value);
}).finally(()=>{
console.log("不管Promise对象最后的状态如何,都会执行的操作");
})