ES6--Promise对象
Promise对象:代表了未来某个将要发生的操作,通常是异步操作
promise对象可以将异步操作以同步的流程表达出来,避免了层层嵌套的
回调函数(回调地狱),ES6的Promise是一个构造函数,用来生成promise实例
基本步骤:1创建promise对象 2.调用promise的then()
3.promise的三个状态:pending:初始化,fullfilled:成功,rejected:失败
4.应用:使用promise实现超时处理,使用promise封装处理ajax请求
使用promise实现封装处理ajax请求
例:
let promise = new Promise((resolve,reject)=>{
console.log("111");
//执行异步操作通常是发送ajax请求,开启定时器
setTimeout(()=>{
console.log("333");
//根据异步任务的返回结果来修改promise的状态
//异步任务执行成功
resolve("哈哈");//修改promise的状态为fullfilled;成功状态
// reject();//修改为失败状态
},2000);
console.log("222");
}).catch((e)=>{});
promise.then((data)=>{//成功的回调,也可以写上参数resolve
console.log(data,'成功了');
},()=>{//失败的回调
console.log('失败了');
});
Promise例子---用ajax获取新闻内容
//promise对象案例练习
//获取新闻内容
function getNews(){
let promise = new Promise((resolve,reject)=>{
//状态:初始化
//执行异步任务
//创建xmlHttp实例对象
let xmlHttp = new XMLHttpRequest();
//绑定监听 readyState
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){//请求成功
console.log(xmlHttp.responseText);
resolve(xmlHttp.responseText);//修改promise的状态为成功状态
}
}else{//请求失败
reject("暂时没有数据");
}
};
xmlHttp.open('GET',url);
xmlHttp.send();
});
return promise;
}
getNews("address url")
.then((data)=>{
console.log(data);
//发送请求获取内容
let theCommemnt = JSON.parse(data).commemntUrl;//commentUrl是data数据里面的一个地址
let url = "address url"+theCommemnt;
return getNews(url);
},(err)=>{
console.log(err);
})
.then((data)=>{
console.log(data);//上面的then返回的数据
},()=>{
});
还没有评论,来说两句吧...