1.Promise 是什么?
答:
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。它最早由社区提出并实现,ES6将其写进了语言标准,统一了用法,并原生提供了Promise对象。它是一个对象,可以获取异步操作的消息,他的出现大大改善了异步编程的困境,避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大
promise本身只是一个容器,真正异步的是它的两个回调 resolve() 和 reject()
promise本质不是控制异步代码的执行顺序(无法控制) ,而是控制异步代码结果处理的顺序
2.Promise的三种状态
对象的状态不受外界影响。
Pending(进行中)
Fulfilled(已成功)
Rejected(已失败)
状态一但改变,就不会再次改变。
Pending --> Fulfilled
Pending --> Rejected
3.Promise怎么用
创建Promise实例
let promise = new Promise(function(resolve, reject){
// 自己的异步逻辑写在这里
if (/* 异步操作成功 */) {
resolve(value);
} else { // 异步操作失败
reject(error);
}
})
4.Promise的实例方法
then :
Promise生成后,可用then指定一种状态回调参数(Promise对象状态改为Resolved时调用)
catch:
Promise实例生成后,可用catch方法指定一种状态回调参数(Promise对象状态改为Rejected时调用 )
基本用法:
function sleep(num) {
return new Promise(function(resolve, reject) {
if (num>1){
resolve('成功')
} else {
reject('失败')
}
})
}
sleep(500).then( res=> console.log(res)).catch(err => console.log(err));
这里的 sleep 函数传入一个num,如果 num>1 ,触发then,打印‘成功’;如果 !num>1 ,则触发catch,打印‘失败’。
5.执行顺序
let promise = new Promise(function(resolve, reject){
console.log("111");
resolve()
});
promise.then(() => console.log("222"));
console.log("333")
// 111
// 222
// 333
可见,promise新建后立即执行,所以先打印‘111’,then在同步操作完成后才执行,所以‘222’在最后打印。