您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關ES6中Promise的使用方法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
因為javascript異步機制,導致一個常見的問題,回調金字塔:
loadImg('a.jpg', function() { loadImg('b.jpg', function() { loadImg('c.jpg', function() { console.log('all done!'); }); }); });
Promise 字面意思,承諾。如果A調用B,B返回一個承諾給A,然后A就可以寫計劃時這么寫:當B返回結果給我的時候,A執行S1方案,反之如果B因為什么原因沒有給A想要的結果,那么A執行應急方案S2,這樣的話,所有潛在風險都在A的控制范圍內
var resB = B(); var runA = function(){ resB.then(execS1,execS2); };
如果A要完成一件事,可能依賴的不是B一個響應,那么上面的代碼就會變成
var resB = B(); var resC = C(); ... var runA = function() { reqB .then(resC, execS2) .then(resD, execS3) .then(resE, execS4) ... .then(execS1); }; runA();
在這里,每當一個詢問者做出不符合預期的應答的時候都用了不同的處理機制,雖然,Promise規范沒有要求這樣做,甚至可以不做任何處理,即(不傳入then的第二個參數),或者統一處理
一個Promise可能存在三種狀態:等待(pending),已完成(fulfilled),已拒絕(rejected)
一個Promise的狀態只可能從"等待"轉到"完成"或者"拒絕",不能逆向轉換
Promise必須實現then方法,(then是promise核心),而且then必須返回一個promise,同一個promise的then可以調用多次,并且回調執行的順序和它們定義的順序一樣。
then方法接受兩個參數,第一個參數是成功時候的回調,另一個是失敗的回調,then可以接受另一個promise傳入,也接受一個"類then"的對象或者方法,即thenable對象
可參考html5rocks的這篇文章JavaScript Promises,目前高級瀏覽器如chrome、firefox都已經內置了Promise對象,提供更多的操作接口,比如Promise.all()
,支持傳入一個promises數組,當所有promises都完成時執行then,還有就是更加友好強大的異常捕獲,應對日常的異步編程,應該足夠了。
現今流行的各大js庫,幾乎都不同程度的實現了Promise,如dojo,jQuery、Zepto、when.js、Q等,只是暴露出來的大都是Deferred
對象,
我們看到,不管Promise實現怎么復雜,但是它的用法卻很簡單,組織的代碼很清晰,從此不用再受callback的折磨了。
最后,Promise是如此的優雅!但Promise也只是解決了回調的深層嵌套的問題,真正簡化JavaScript異步編程的還是Generator,在Node.js端,建議考慮Generator。
關于ES6中Promise的使用方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。