promise
1.promise是什么:
由社区提出的,为了解决异步回调深渊的一种解决方案
它有三种状态:
pending进行中
resolved已完成
rejected已失败
2.promise如何使用
方法1:
let promise = new Promise(function(resolve,reject){
//业务逻辑
if(success){
resolve(a); //此时由pendding变为resolve
}else{
reject(err); //此时由pendding变为reject
}
})
方法2 :
function promise() {
return new Promise(function(resolve,reject){
//业务逻辑
if(success){
resolve(a); //此时由pendding变为resolve
}else{
reject(err); //此时由pendding变为reject
}
})
}
3.promise的方法
then(); resolve状态,进行then方法
catch(); reject状态,进行catch方法
ajax封装
myAjax.js:
function PromiseAjax(method,url,param,async) {
return new Promise((resolve,reject)=>{
//1. 创建xhr对象
try{
var xhr;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
if(method=="get" && param){
url = url+"?"+param;
}
xhr.open(method,url,async);
//3. 发起请求,post请求,参数写在send里面
if(method=="post"){
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //post需求设置请求
}
if(method=="post"){
xhr.send(param);
}else{
xhr.send();
}
//4. 设置响应的处理事件 readyState
xhr.onreadystatechange = function(){
if(xhr.readyState==4&&xhr.status==200){
resolve(xhr.responseText);
}
}
}catch (e) {
reject(e);
}
finally {
}
})
}