异步编程的解决方案。
三个状态:
pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)
resolve();将状态变为成功.
rejected();将状态变为失败
创建:
let promise = new Promise(function(resolve,rejected){
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
})
1、创建后,会立即执行:
封装AJAX:
function get ({mode,url}){
const promise = new Promise(function(resolve,rejected){
let xml = new XMLHttpRequest(); //创建一个发送对象
xml.open(mode,url) //选择所发送的请求
xml .responseType = "json";//设置响应数据类型
xml .setRequestHeader("Accept", "application/json");//设置请求头
xml.send();//发送请求
xml.onreadystatechange = function(){ //当状态发生改变的时候所应该的反应
if(xml.readyState ==4 && xml.status == 200){ //获取成功
resolve(xml.response);
}
}
})
return promise
}
回调方法:
then():成功时候调用
catch() :失败的时候调用
finally():一定会执行。
若需要多个请求的完成才进行异步操作,应该使用:
const p = Promise.all([promise1,promise2]);
eg:
Promise.all([
booksPromise,
userPromise
])
.then(([books, user]) => pickTopRecommendations(books, user));