首页 > 代码库 > javaScript之promise
javaScript之promise
异步加载一直是我很头痛的问题,本科阶段学过异步同步通信就把我绕的很糊涂。但是接触到JS中的异步加载后我才真正认识到,所谓的异步加载就像一个客服中心,每一个工作人员就对应一条工作流程线。下面我会详细介绍pronise的实现方法。
promise,就是一个对象,用来传递异步操作消息。它代表某个未来才会知道结果(成功或失败)的事件。
pomise对象的特点包括:
(1) 对象的状态不受外界的影响。
有3个状态,Pendind、Resolved和Rejected。只有异步操作的结果可以决定当前哪一种状态,任何其他操作都无法改变这个状态。
(2) 一旦状态改变就不会再变,任何时候都可以得到这个结果。
promise的状态改变只有两种,一个是从Pending到Resolved,另一个是从Pending到Rejected。只要其中一个发生,状态就凝固了,任何其他操作都无法改变这个状态。
pomise对象的缺点包括:
(1) 一旦创建就会立即执行,无法取消
(2) 如果不设置回调函数,内部错误无法抛出
(3) 当处于pending状态时,无法得知目前进展到哪一阶段。
兼容性:
Promise只是让我们当下的JS换了一种形式实现,更符合编程时候的思考角度与方式。因此,通过特定的转换,我们也可以让不支持Promise的低版本浏览器支持之。您可以试试在页面引入如下JS:
<script src="http://s3.amazonaws.com/es6-promises/promise-0.1.1.min.js"></script>
基本用法
promise对象的AJAX实现
var getJSON = function(url){ var promise = new Promise(function(resolve, reject){ var xhr = new XMLHttpRequest(); xhr.open("GET",url); xhr.onreadystatechange = handler; xhr.responseType = "json"; xhr.setRequestHeader("Accept", "application/json"); xhr.send(); function handler() { if( this.readyState != 4){ return; } if( this.status == 200){ resolve( this.response); }else{ reject( new Error( this.statusText)); } } }); return promise;}getJSON(‘./post.json‘).then(function(json){ console.log("content" + json);}).catch{ console.log("出错了")}
....未更新完
javaScript之promise
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。