promise學習筆記

1.Promise是什么段磨?

? ? 主要用于異步計算,可以將異步操作隊列化蜓竹,按照期望的順序執(zhí)行箕母,返回符合預期的結果。

可以在對象之間傳遞和操作Promise俱济,幫助我們處理隊列嘶是。

2.異步產(chǎn)生的原因

? ? JavaScript為檢查表單而生,創(chuàng)造它的首要目標是操作DOM蛛碌,所以JavaScript的操作大多是異步的聂喇。

? ? 異步,A和B任務的交付順序和安排順序無關蔚携。? ??

3.Promise詳解

promise

????Promise是一個代理對象希太,它和原先要進行的操作并無關系。

????它通過引入一個回調(diào)酝蜒,避免更多的回調(diào)誊辉。

? ? Promise 有3個狀態(tài):

? ? ? ? ? ? pending【待定】初始狀態(tài)

? ? ? ? ? ? fulfilled【實現(xiàn)】操作成功

? ? ? ? ? ? rejected【被否決】操作失敗

? ? ? 當Promise狀態(tài)發(fā)生改變,就會觸發(fā).then()里的響應函數(shù)處理后續(xù)步驟亡脑。

? ? ? ?Promise狀態(tài)如果已經(jīng)改變芥映,不會再變。

4. .then()

? ? ? ? .then()接受兩個函數(shù)作為參數(shù)远豺,分別代表fulfilled和rejected

? ? ? ? .then()返回一個新的Promise實例奈偏,所以它可以鏈式調(diào)用

? ? ? ? 當前面的Promise狀態(tài)改變時,.then()根據(jù)其最終狀態(tài)躯护,選擇特定的狀態(tài)響應函數(shù)執(zhí)行惊来。

? ? ? ? 狀態(tài)響應函數(shù)可以返回新的Promise,或其它值(不返回也可以棺滞,我們默認返回一個空)

? ? ? ? 如果返回新的Promise裁蚁,那么下一級.then()會在新的Promise狀態(tài)改變之后執(zhí)行矢渊。

? ? ? ? 如果返回其它任何值,則會立刻執(zhí)行下一級.then()

5. .then()里有.then()的情況

? ? ? ? 因為.then()返回的還是Promise實例

6.錯誤處理

????????Promise會自動捕獲內(nèi)部異常枉证,并交給rejected響應函數(shù)處理??

? ? ? ? 錯誤處理的兩種做法:

? ? ? ? 1.reject(‘錯誤信息’).then(null.message = > {})

? ? ? ? 2.throw new Error('錯誤信息').catch(message = > {})

? ? ? ? 3.推薦使用第二種矮男,更加清晰好讀,并且可以捕獲前面的錯誤室谚。

7.catch() + .then()

? ? ? ? 強烈建議在所有隊列最后都加上毡鉴。catch(),以避免漏掉錯誤處理造成意想不到的問題秒赤。

8.Promise常用的函數(shù)

? ? ? ? 1.Promise.all()

? ? ? ? ? ? ? ? Promise.all([p1,p2,p3,....])用于將多個Promise實例猪瞬,包裝成一個新的Promise實例。返回的實例就是普通Promise

? ? ? ? ? ? ? ? 它接受一個數(shù)組作為參數(shù)入篮,數(shù)組里可以是Promise對象陈瘦,也可以是別的值,只有Promise會等待狀態(tài)改變潮售。

? ? ? ? ? ? ? ? 當所有子Promise都完成痊项,該Promise完成,返回值是全部值的數(shù)組

? ? ? ? ? ? ? ? 有任何一個失敗酥诽,該Promise失敗鞍泉,返回值是第一個失敗的子Promise的結果

? ????Promise.all()最常見就是和.map()連用。

? ?實現(xiàn)隊列

? ? ? ? 使用.forEach()

? ? ? ? ? ? ? ? 常見錯誤:沒有爸.then()產(chǎn)生的新Promise實例賦給promise盆均,沒有生成隊列塞弊。

? ? ? ? 使用.reduce()

? ? ? ? ? ? ? ? 常見錯誤:Promise實例創(chuàng)建之后漱逸,會立刻運行執(zhí)行代碼泪姨,所以這個也無法達成隊列效果。

? ??

? ? ? ? 2.Promise.resolve()

? ? ? ? 返回一個fulfilled的Promise實例饰抒,或原始Promise實例肮砾。

? ? ? ? ? ? ? ? 參數(shù)為空,返回一個狀態(tài)為fulfilled的Promise實例

? ? ? ? ? ? ? ? 參數(shù)是一個跟Promise無關的值袋坑,同上仗处,不過fulfuilled響應函數(shù)會得到這個參數(shù)

? ? ? ? ? ? ? ? 參數(shù)為Promise實例,則返回該實例枣宫,不作任何修改婆誓。

? ? ? ? ? ? ? ? 參數(shù)為thenable,立刻執(zhí)行它的.then()? ??

? ? ? ? 3.Promise.reject()

? ? ? ? 返回一個rejected的Promise實例

? ? ? ? ? ? ? ? Promise.reject()不認thenable? ? ??

? ? ? ? 4.Promise.race()

? ? ? ? 類似Promise.all(),區(qū)別在于也颤,它有任意一個完成洋幻,就算完成。

? ? ? ? ?常見用法:

? ? ? ? ? ? ? ? 把異步操作和定時器放在一起翅娶,如果定時器按時觸發(fā)文留,就認為超時好唯,告知用戶。

9.現(xiàn)實中的Promise

? ? ? ? 1.把回調(diào)包裝成promise最為常見燥翅。它有兩個顯而易見的好處:

? ? ? ? ? ? ? ? 可讀性更好

? ? ? ? ? ? ? ? 返回的結果可以加入任何Promise隊列

? ? ? ? 2.把任何異步操作包裝成Promise

? ? ? ? ? ? ? ? 假設需求:

? ? ? ? ? ? ? ? ? ? ? ? 用戶點擊按鈕骑篙,彈出確認窗體

? ? ? ? ? ? ? ? ? ? ? ? 用戶確認和取消有不同的處理

? ? ? ? ? ? ? ? ? ? ? ? 樣式問題不能使用window.conform()

10.jQuery

? ? ? ? jQuery已經(jīng)實現(xiàn)了Promise。

11.兼容問題

如果需要在IE中使用Promise森书,有兩個選擇:

? ? ? ? 只想實現(xiàn)異步隊列:jQuery.defered

? ? ? ? 需要兼容所有平臺:Bluebird 或Promise polyfill

12.Fetch API

? ? ? ? 更強大靶端,也更友好。

? ? ? ? 直接返回一個Promise實例拄氯。? ?

13.async/await

? ? ES2017新增運算符躲查,新的語言元素。

? ? ? ? 賦予JavaScript以順序首發(fā)便攜異步腳本能力

? ? ? ? 既保留異步運算的無阻塞特性

????? ? ? ? ? ??

????? ? ?

? ??

? ??


? ??

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末译柏,一起剝皮案震驚了整個濱河市镣煮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鄙麦,老刑警劉巖典唇,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胯府,居然都是意外死亡介衔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門骂因,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炎咖,“玉大人,你說我怎么就攤上這事寒波”咂唬” “怎么了衡创?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵菱涤,是天一觀的道長海诲。 經(jīng)常有香客問我,道長页屠,這世上最難降的妖魔是什么粹胯? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辰企,結果婚禮上风纠,老公的妹妹穿的比我還像新娘。我一直安慰自己牢贸,他們只是感情好竹观,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著十减,像睡著了一般栈幸。 火紅的嫁衣襯著肌膚如雪愤估。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天速址,我揣著相機與錄音玩焰,去河邊找鬼。 笑死芍锚,一個胖子當著我的面吹牛昔园,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播并炮,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼默刚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逃魄?” 一聲冷哼從身側(cè)響起荤西,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伍俘,沒想到半個月后邪锌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡癌瘾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年觅丰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妨退。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妇萄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咬荷,到底是詐尸還是另有隱情冠句,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布萍丐,位于F島的核電站轩端,受9級特大地震影響放典,放射性物質(zhì)發(fā)生泄漏逝变。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一奋构、第九天 我趴在偏房一處隱蔽的房頂上張望壳影。 院中可真熱鬧,春花似錦弥臼、人聲如沸宴咧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掺栅。三九已至烙肺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氧卧,已是汗流浹背桃笙。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沙绝,地道東北人搏明。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像闪檬,于是被迫代替她去往敵國和親星著。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 回調(diào)地獄 首先有一個需求粗悯,如何連續(xù)根據(jù)函數(shù)的依賴關系虚循,實現(xiàn)多個函數(shù)的連續(xù)調(diào)用,而且要在前置函數(shù)完成的情況下样傍。例如 ...
    fejavu閱讀 761評論 0 3
  • Promise 對象 Promise 的含義 Promise 是異步編程的一種解決方案邮丰,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,706評論 1 56
  • Promise 是個啥? 馬上拿起來了一個有道詞典查了一下. 有承諾,保證的意思.很多電影里都有這句臺詞:I Pr...
    人話博客閱讀 620評論 0 50
  • async 函數(shù) 含義 ES2017 標準引入了 async 函數(shù),使得異步操作變得更加方便铭乾。 async函數(shù)對 ...
    Xyaleo閱讀 1,094評論 0 4
  • Promise 是 ES6 推出的另一個用于異步函數(shù)回調(diào)的構造函數(shù). 它的使用方式大致如下. 一個實際的例子 Pr...
    人話博客閱讀 705評論 0 50