javaScript之promise

來源:互聯網
上載者:User

標籤:錯誤   非同步   編程   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.