Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。
Promise 对象是由关键字 new 及其构造函数来创建的。该构造函数会把一个叫做“处理器函数”(executor function)的函数作为它的参数。这个“处理器函数”接受两个函数——resolve 和 reject ——作为其参数。当异步任务顺利完成且返回结果值时,会调用 resolve 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用reject 函数。
1.promise是window下的一个属性,他接受一个函数,该函数有两个参数
构造一个promise实例:
var a= new promise(function(resolve,reject){
要执行的代码
if(contions){
resolve.call(null,'sucess')
}else{
reject.call(null,'fail')
}
})
a.then(
(text)=>{console.log(text)},//sucess
(text)=>{console.log(text)}//fail
);
2.promise在AJAX中的应用
//封装一个AJAX
window.jquery={}
window.$=window.jquery
jquery.ajax=function(options){
return new Promise(function(resolve,reject){
var request=new XMLHttpRequest();
let {url,method,body,headers}=options
console.log(method)
request.open(method,url);
for(let key in headers){
let value =headers[key]
request.setRequestHeader(key,value)
}
request.send(body);
request.onreadystatechange=function(){
if(request.readyState==4){
if(request.status < 400){
resolve.call(undefined,request.responseText)
}else{
reject.call(undefined,request)
}
}
}
})
}
let button=document.getElementById("button");
let number = document.getElementById('number');
button.addEventListener('click',()=>{
let a=$.ajax({
'method':'post',
'url':'./x',
'body':'"wang":"15"',
'headers':{
'name':'wang',
'Content-Type':'application/x-www-form-urlencoded'
}
}).then(
(Text)=>{console.log(Text)},
(text)=>{console.log(text.responseText)}
)
});
上面,调用AJAX之后,会返回一个promise对象,promise有一个then方法。then方法接受两个函数,成功是执行第一个函数,失败时执行第二个函数。