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