function getNews(url) {//假如这是一个异步Ajax获取新闻的方法,返回值是一个promise对象,通过返回的对象判断是否成功获取新闻以及内容 //promise的状态有三种,初始化,成功,失败 let promise = new Promise((resolve, reject) => { //这时状态时初始化
//执行异步操作 let xmlHttp = new XMLHttpRequest(); xmlHttp.open('GET', url); xmlHttp.send(); xmlHttp.onreadystatechange = () => { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) {//请求成功 let response = xmlHttp.responseText;//获取响应的内容,以文本的方式 resolve(response);//调用resolve后promise的状态变为成功,并传入响应结果 } else {//请求失败 reject(xmlHttp.status);//调用reject后promise的状态变为失败,并传入状态码 } } }; }); return promise; }
let pro = getNews('https://www.baidu.com'); pro.then(data=>{//promise.then表示当该Promise有结果后调用,里面传入两个函数,分别是成功和失败后调用的函数 console.log('请求到了新闻内容:'+data); },error=>{ console.log('没有请求到新闻内容,状态码为:'+error); })
//注:使用promise封装异步方法处理结果,和直接调用异步方法在回调函数中处理结果相比,看起来流程更复杂了。但是使用了promise会 //让逻辑结构更为清楚和好理解,并且回调的嵌套也少了。特别是在方法中有回调函数的时候,我们希望在外面调用这个方法的获取回调函数 //中的内容时候,如果没有promise,我们很难将异步返回的内容直接作为方法返回值返回,我们就需要传入函数到这个方法中,在方法里面 //异步执行完后再调用我们传入的函数,比较麻烦。有了promise后我们就可以直接返回一个promise,然后再外面解析这个promise就可以 //获取到方法里面异步执行的结果和状态。
原文地址:https://www.cnblogs.com/maycpou/p/12335631.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。