promise:ES6中新推出的promise函数,是一个构造函数,它实际上是对回调函数的一种封装,对异步编程的一种改进。
它的作用:改造Ajax依赖调用,让Ajax按顺序执行,使用链式结构代替了嵌套结构。
Promise(ajax1).then(ajax2).catch()
Ajax请求成功,执行resolve,否则执行reject
实例:
function fn(msg){
//创建对象
const p = new Promise(function(resolve,reject){
if(msg){
resolve(“获取成功”);
}
else{
reject(“失败”);
}
});
return p;//注意不要忘记返回值
}
let oP = fn(0);//0为false,调用reject
oP.then(function(str){//创建一个匿名函数赋给resolve
alert(str);
}).catch(function(str){//创建一个匿名函数赋值给reject,注意这里,用 “.” 连接catch
alert(str);
});
(一) 问题1:如果有三个ajax请求,调用顺序无关,但必须保证三个都成功,才能开始第四个?
Promise.all(function(){ //p123
return [p1,p2,p3];
}).then(function(){
return p4;
});
promise.all(),必须是全部的Ajax都请求成功后,再开始指定的Ajax。
p4依赖p123的状态
(二) 问题2:如果有三个ajax请求,只要任意一个成功,则开始第四个?
Promise.race(function(){
return [p1,p2,p3];
}).then(function(){
return p4;
});
promise.race(),只要有一个请求完成后就可以开始下一个。