promise简介
- Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理
和更强大。 - 所谓 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是
一个异步操作)的结果 - 从语法上说,Promise 是一个对象,从它可以获取异步操作的消
息 - 有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)
- 基本语法
let promise = new Promise(function(resolve,reject){
//promise 指定两个参数
//resolve 成功调用
//reject 失败调用
});
通过then()调用 指定两个函数作为参数
第二个参数是可选的,不一定要提供
promise.then(res=>{
//成功调用后返回
},err=>{
//调用失败后返回
})
- Promise.resolve(‘aa’) : 将现有的东西,转成一个 promise 对象 等价于
new Promise((resolve, reject) =>{
reject('aaa')
});
- Promise.all([p1, p2, p3]): 把 promise 打包,扔到一个数组里面,打包完还是一个
promise 对象
let p1 = Promise.resolve("aaaa");
let p2 = Promise.resolve("bbbb");
let p3 = Promise.resolve("cccc");
Promise.all([p1,p2,p3]).then(res=>{
//p1,p2,p3 状态必须是resolve===>成功
let [res1,res2,res3] = res; //必须解构赋值 ****
console.log(...res);
})
- promise 调用AJAX
function getXhr() {
var xhr = null;
if(window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHttp");
}
return xhr;
}
function getAjax(url, fn) {
var xhr = getXhr();
xhr.open("get", url, true);
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
//console.log("成功!")
var datajson = eval("(" + xhr.responseText + ")");
fn(datajson);
}
}
xhr.send(null);
}
let promise=new Promise((resolve,reject)=>{
if(getXhr()){
resolve(true);
}else{
reject("ajax运行错误");
}
})
promise.then(res => {
getAjax("data/data1.json", res=> {
console.log(res)
},rej=>{
console.log("程序错误")
})
})