保持对代码的热爱并保持怀疑态度
什么是pormise?
Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息。
自身存在三个状态:正在进行时,已完成,已失败
优化了异步程序的回调地狱问题。
什么是回调地狱?
看代码
ajax("",function(res1){
ajax("",function(res2){
ajax("",function(res3){
ajax("",function(res4){
ajax("",function(res5){
ajax("",function(res6){
// 1,2,3,4,5,6
})
})
})
})
})
})
由此得出:回调地狱是在一个异步的回调函数中,开启另一个异步,持续开启下去。
缺点:
- 浪费性能
- 不方便维护
- 代码丑
pormise基础语法
var p = new Promise(function(resolve,reject){
// 已完成状态确定
resolve();
// 已失败状态确定
reject();
})
p.then(function(){
console.log("已完成");
}).catch(function(){
console.log("已失败")
})
对应到ajax的里的修改
function ajax(){
return new Promise(function(resolve,reject){
// 开启异步的程序
// 异步程序执行完毕,得到状态后,根据状态执行已完成或已失败
// 已完成状态确定
resolve();
// 已失败状态确定
reject();
})
}
ajax().then(()=>{}).catch(()=>{})
promise的方法
- 实例的方法
- var p = new Promise((resolve,reject)=>{})
- p.then()
- p.catch()
- 构造函数的方法
-
Promise.all([p1,p2,p3]);
Promse.all在处理多个异步处理时非常有用,比如说一个页面上需要等两个或多个ajax的数据回来以后才正常显示,在此之前只显示loading图标。 -
Promise.race([p1,p2,p3]);
顾名思义,Promse.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
-