码迷,mamicode.com
首页 > 编程语言 > 详细

javaScript之promise

时间:2017-06-17 13:10:27      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:错误   异步   编程   response   amazon   es6   ret   未来   另一个   

    异步加载一直是我很头痛的问题,本科阶段学过异步同步通信就把我绕的很糊涂。但是接触到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

标签:错误   异步   编程   response   amazon   es6   ret   未来   另一个   

原文地址:http://www.cnblogs.com/microcosm/p/7039826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!