摘要:執行時機新建后會立即執行,同步的,但是和的回調函數是異步的,但是它的回調是放在本輪循環的末尾執行,并不是放到下次事件循環中執行。在狀態改變后再添加回調函數仍能立即得到結果,這是與事件的區別,事件結束再去監聽,是得不到結果的。
簡介
本文只是針對對Promise有一定掌握的人士,列舉了Promise需要記住和掌握的關鍵點,不是講Promise的基礎知識。如果是學習Promise,請移步阮一峰老師的博客。執行時機
Promise新建后會立即執行,同步的,但是resolved和rejected的回調函數是異步的, 但是它的回調是放在本輪循環的末尾執行,并不是放到下次事件循環中執行。Promise 三種狀態
pending (進行中)
fulfilled (已成功)
rejected (已失敗)
三種狀態只能是由pending到fulfilled,或由pending到rejected。狀態一旦改變,不會再變。 在狀態改變后再添加回調函數仍能立即得到結果,這是與事件的區別,事件結束再去監聽,是得不到結果的。Resolve
Rejected參數會傳遞給then回調函數
和rejected都不會終止后續代碼執行,resolved后面的代碼仍會執行,除非在resolved時return
當resolved的參數是一個promise實例時,會等待上一個promise的狀態返回
catch參數傳遞給回調函數
參數通常是Error對象的實例
運行拋出異常,狀態也會變為Rejected
then不僅狀態變為rejected時會觸發,運行中拋出的錯誤也會被catch捕獲
resolve之后拋出的異常,不會被捕獲,狀態只會更改一次,更改后就不會改變。
“冒泡”性質,一直向后傳遞,直到被捕獲。也就是說錯誤肯定會被后面的catch捕獲。
如果不寫catch,promise有錯誤時,不會有任何反應,不會退出進程、終止腳本執行,promise和外部代碼“隔離”(未來可能更改這規則)
后面可以繼續跟then和catch
返回一個resolved狀態的promise對象,所以如果拋出一個錯誤,只會觸發第一個catch
finally返回的是一個新的promise對象,不是原來的
不推薦傳rejected回調函數,這樣無法捕獲resolved回調函數中的錯誤
如果函數中返回的是一個promise,則后面的then會等待這個promise的結果
finally方法用于指定不管 Promise 對象最后狀態如何,都會執行的操作。
與狀態無關的,resolved或rejected了都會觸發finally(底層也是這么實現的); 但如果promise沒有返回resolved或rejected是不會執行的。Promise.all()
Promise.all方法用于將多個 Promise 實例,包裝成一個新的 Promise 實例。
自動把包裝的實例轉化成promise實例
包裝的promise實例都resolved了它就resolved
有一個rejected,它就rejected
如果容器中的實例有自己的catch,則不會觸發all的catch
因為catch返回是一個新的promise,catch已經處理了錯誤,返回的promise是resolved的,所以對all來說是兩個resolved的實例Promise.race()
和all類似,只是它是有一個實例率先改變狀態了,它的狀態就改變了。Promise.resolve()
把對象轉換成promise對象
參數是一個 Promise 實例
原封不動地返回這個實例。
參數是一個thenable對象
thenable對象指的是具有then方法的對象,比如下面這個對象。
let thenable = { then: function(resolve, reject) { resolve(42); } };
resolve會立即執行then方法,然后返回一個resolved的promise對象
參數不是具有then方法的對象,或根本就不是對象
返回一個狀態是resolved的promise對象
不帶有任何參數
直接返回一個resolved狀態的 Promise 對象。(注意promise回調的執行時機)Promise.reject()
返回一個狀態為rejected的promise對象
Promise.reject()方法的參數,會原封不動地作為reject的理由,變成后續方法的參數。這一點與Promise.resolve方法不一致Promise.try
這個有需要一些技術儲備,后續補充。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/94402.html
摘要:的翻譯文檔由的維護很多人說,阮老師已經有一本關于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:常用知識總結之前總結了中的一些知識點。在年正式發布了,簡稱,又稱為。作為構造函數的語法糖,同時有屬性和屬性,因此同時存在兩條繼承鏈。子類的屬性,表示構造函數的繼承,總是指向父類。 ES6常用知識總結 之前總結了es5中js的一些知識點。這段時間看了石川blue老師講解的es6課程,結合阮一峰老師的es6教程,隨手做了一些筆記和總結分享給大家。內容還是es6主要的知識點,基本沒有什么創新...
摘要:常用知識總結之前總結了中的一些知識點。在年正式發布了,簡稱,又稱為。作為構造函數的語法糖,同時有屬性和屬性,因此同時存在兩條繼承鏈。子類的屬性,表示構造函數的繼承,總是指向父類。 ES6常用知識總結 之前總結了es5中js的一些知識點。這段時間看了石川blue老師講解的es6課程,結合阮一峰老師的es6教程,隨手做了一些筆記和總結分享給大家。內容還是es6主要的知識點,基本沒有什么創新...
摘要:常用知識總結之前總結了中的一些知識點。在年正式發布了,簡稱,又稱為。作為構造函數的語法糖,同時有屬性和屬性,因此同時存在兩條繼承鏈。子類的屬性,表示構造函數的繼承,總是指向父類。 ES6常用知識總結 之前總結了es5中js的一些知識點。這段時間看了石川blue老師講解的es6課程,結合阮一峰老師的es6教程,隨手做了一些筆記和總結分享給大家。內容還是es6主要的知識點,基本沒有什么創新...
閱讀 797·2023-04-26 03:04
閱讀 2873·2021-11-15 18:10
閱讀 1199·2021-09-03 10:28
閱讀 1137·2019-08-30 15:53
閱讀 897·2019-08-30 12:45
閱讀 1965·2019-08-30 11:03
閱讀 2870·2019-08-29 14:01
閱讀 2935·2019-08-28 18:24