Promise是异步编程的一种解决方案。
比传统的解决方案——————回调函数和事件,Promise更合理和更强大。
在ES6规范中,Promise是提供的一个构造函数,可以new Promise()对象
Promise
对象代表一个异步操作,
Promise有三种状态:
pending
(进行中)
fulfilled
(已成功)
rejected
(已失败)
Promise
构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
const test = new Promise(function(resolve,reject){
if(1){
resolve('改变状态') //resolve改变状态为fulfilled
}
})
test.then((result)=>{
console.log(result); //改变状态
})
resolve
函数的作用是,将Promise
对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject
函数的作用是,将Promise
对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
下面写一个Promise实现一个Ajax请求
const getJSON = (url)=>{
return new Promise((resolve,reject)=>{
const handleAjax = ()=>{ //定义状态改变回调函数
if(this.readyState==4 && this.status==200){
resolve(this.responseText);
}else{
reject(new error(this.statusText))
}
}
const XML = new XMLHttpReauest();
XML.open('GET',url);
XML.onreadystatechange = handelAjax ;
XML.setRequestHeader("Accept", "application/json");
XML.send(null);
})
}
getJSON('/login.json').then((json)=>{
console.log(json)
},(error)=>{
console.error(error);
})
remenber——my deer Miss.fong