Promise 承诺
Promise相当于一个容器,保存着未来才会结束的事件(异步操作)结果
各种异步操作都可以用同样的方法进行处理 axios
特点:
1.对象的状态不受外界影响 处理异步操作,三个状态 pending(进行) resolved(成功) rejected(失败)
2.一旦状态发生改变,任何时候都可以得到这个结果
首先先查看一下promise的结构
let pro = new Promise(function(resolved,reject){
//执行异步操作...
});
console.log(pro);
模拟异步操作,resolved返回成功数据,reject返回失败的数据
let pro = new Promise(function(resolved,reject){
//执行异步操作...
let res = {
code : 201,
data: {
name:'张三',
age : 20
},
error:{
msg : 'something wrong happened'
}
}
setTimeout(()=>{
if(res.code === 200){
resolved(res.data);
}else{
reject(res.error);
}
},2000);
});
console.log(pro);
pro.then((val)=>{
//成功回调函数
console.log(val);
}),(err)=>{
//失败回调函数
console.log(err)
}
Promise封装ajax方法(axios其实就是对Promise的封装)
function getData(url){
new Promise((resolve,reject)=>{
const xhr = new XMLHttpRequest();
xhr.open('GET',url);
xhr.onreadystatechange = handler;
xhr.responseType = 'json';
xhr.setRequestHeader('Accept','application/json');
xhr.send();
function handler(){
console.log(this);
if(this.readyState === 4){
if(this.status == 200){
}
}
}
})
}
getData(url).then((val)=>{
console.log(val);
})
then() 方法
1.then()第一个参数是resolved回调函数,第二个参数是可选的,是reject状态回调函数
2.then()返回一个新的promise实例,可以采用链式编程