使用场景
1》解决回调地狱问题,常常第一个函数的输出是第二个函数的输入这种现象
多并发请求,获取并发请求中的数据
2》比如:一些游戏类的素材比较多的应用,打开网页时,预加载需要用到的各种资源如图片,flsah以及各种静态文件,所有加载完后,我们进行页面初始化(使用all方法)
3》比如:现在有多个异步操作ajax请求,我们需要当所有异步请求都成功的时候,执行后续操作(使用all方法)
//多个ajax(异步)需要顺序执行
new Promise(ajax1).then(function(){
return new Promise(ajax2);
}).then(function(){
return new Promise(ajax3)
}).then(ajax4)
//有三个异步必须都执行完后,才能执行第4个
Promise.all([new Promise(func1),new Promise(func2),new Promise(func3)]).then(func4)
把多个Ajax请求顺序着写下来了,而后面的请求,对前面请求的返回结果,是有依赖的
function ajax(url,data,callback){
var p=new Promise(function(resolve,reject){
$.ajax({
url:url,
type:data==null?'GET':'POST',
dataType:"json",
data:data==null?'':JSON.stringfiy(data),
async:true,
contentType:"application/json",
success:function(resp){
callback(resp);
resolve();
},
error:function(XMLHttpRequest,textStatus,errorThrow){
if(XMLHttpRequest.status=="401"){
window.parent.location = '/enterprise/enterprise_login.html';
self.location = '/enterprise/enterprise_login.html';
}else{
alert(XMLHttpRequest.responseText);
}
reject();
}
});
});
return p;
}
ajax('/prefix/entity1/action1',null,function(){
someData.attr1 = resp.attr1;
}).then(
ajax('/prefix/entity1/action2',someData,function(resp){
}
).then(
initVue();
).then(
//do something else
)