Promise是为了AJAX请求变得更加优雅,Promise并不能发送请求,是为了解决回调地狱。
Promise主要是为了解决js中多个异步回调难以维护和控制的问题。
在ES6中,Promise对象是一个构造函数,用来生成promise实例。
Promise构造函数,接收一个函数作为参数,该函数有两个参数,分别是resolve,reject(这两个是函数,由js引擎提供,不用自己部署)
Promise实例生成以后,可以用then方法分别指定resolved,rejected状态的回调函数。
then方法接受两个回调函数作为参数:
1.Promise对象变成resolved时调用,
2.Promise对象变成rejected时调用。
ajax结合promise发送网络请求
var getData=function(url,type,data){
var promise=new Promise(function(resolve,reject){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open(type,url);
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState!==4){
return;
}else{
if(xmlhttp.status>=200&&xmlhttp.status<300 || xmlhttp.status===304){
resolve(xmlhttp.responseText);
}else{
reject(new Error(xml.xmlhttp));
}
}
}
if(type=='get'){
xmlhttp.send();
}else{
xmlhttp.setRequestHeader("Content-Type","application/json");
xmlhttp.send(JSON.stringify(data));
}
});
return promise;
}
Promise串行
一个异步请求完了之后再进行下一个请求
queryThen(){
getData('/get1','get')
.then(res=>{
console.log(res);
return getData('/get2','get');
},err=>{
console.log(err);
})
.then(res=>{
console.log(res);
},err=>{
console.log(err);
})
}
Promise并行
多个异步请求同时进行,这些异步请求都成功了之后才会返回结果,其中任何一个没有成功,都拿不到结果。
Promise.all([
getData('/get1','get')
.then(res=>{
console.log(res)}),
getData('/get2','get')
.then(res=>{
console.log(res)})
])
var p1=new Promise(function(resolve,reject){
getData
版权声明:本文为qq_41217480原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。