理解
-
Promise对象:代表了未来某个将要发生的事件(通常是一个异步操作)
-
有了promise对象,可以将异步操作用同步的流程表达出来,避免了层层嵌套的回调函数(‘回调地狱’)
-
ES6的promise是一个构造函数,用来生成promise实例
-
使用promise基本步骤:
- 创建promise对象
let promise=new Promise((resolve,reject)=>{ //初始化promise状态penging //执行异步操作 if(异步操作成功){ resolve(value);//修改promise状态为fullfilled }else{ reject(errMsg);//修改promise的状态为rejected } })
- 调用promise的then()
promise.then(function(result=>console.log(result),errMsg=>alert(errMsg)))
-
promise的三个状态
- pending:初始化状态
- fullfilled:成功状态
- rejected:失败状态
-
应用:
- 使用promise实现超时处理
- 使用promise封装处理ajax请求
let request=new XMLHttpRequest(); request.onreadystatechange=function(){ } request.responseType='json'; requset.open("GET",url) request.send();
-
实例
function getNews(url){
let promise=new Promise((resolve,reject)=>{
//初始化
//执行异步操作
//创建xmlhttp实例
let request=new XMLHttpRequest()
//绑定监听
request.onreadystatechange=function(){
if(request.readyState===4){
if(request.status===200){
console.log(request.responseText)
//修改状态
resolve(request.responseText)
}else{
//请求失败
reject('No News...')
}
}
}
//open请求方式
request.open('GET',url)
//发送
request.send()
})
return promise
}
getNews('http://localhost:3000/news?id=2')
.then((data)=>{
console.log(data)
let commentsUrl=JSON.parse(data).commentsUrl
let url='http://localhost:3000'+commentsUrl
return getNews(url)
},(error)=>{
console.log(error)
})