首页
/
每日頭條
/
圖文
/
es6新特性promise詳解
es6新特性promise詳解
更新时间:2024-10-05 01:17:39
簡介
本文隻是針對對Promise有一定掌握的人士,列舉了Promise需要記住和掌握的關鍵點,不是講Promise的基礎知識。

es6新特性promise詳解(ES6的重中之重Promise的用法)1

執行時機

Promise新建後會立即執行,同步的,但是resolved和rejected的回調函數是異步的, 但是它的回調是放在本輪循環的末尾執行,并不是放到下次事件循環中執行。

Promise三種狀态
  • pending (進行中)

  • fulfilled (已成功)

  • rejected (已失敗)

三種狀态隻能是由pending到fulfilled,或由rejected到rejected。狀态一旦改變,不會再變。 在狀體改變後再添加回調函數仍能立即得到結果,這是與事件的區别,事件結束再去監聽,是得不到結果的。

Resolve
  • 參數會傳遞給then回調函數

  • 和rejected都不會終止後續代碼執行,resolved後面的代碼仍會執行,除非在resolved時return

  • 當resolved的參數是一個promise實例時,會等待上一個promise的狀态返回

Rejected
  • 參數傳遞給回調函數

  • 參數通常是Error對象的實例

  • 運行抛出異常,狀态也會變為Rejected

catch
  • 不僅狀态變為rejected時會觸發,運行中抛出的錯誤也會被catch捕獲

  • resolve之後抛出的異常,不會被捕獲,狀态隻會更改一次,更改後就不會改變。

  • “冒泡”性質,一直向後傳遞,直到被捕獲。也就是說錯誤肯定會被後面的catch捕獲。

  • 如果不寫catch,promise有錯誤時,不會有任何反應,不會退出進程、終止腳本執行,promise和外部代碼“隔離”(未來可能更改這規則)

  • 後面可以繼續跟then和catch

then
  • 返回的是一個新的promise對象,不是原來的

  • 不推薦傳rejected回調函數,這樣無法捕獲resolved回調函數中的錯誤

  • 如果函數中返回的是一個promise,則後面的then會等待這個promise的結果

finally
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方法不一緻

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
熟薏仁米和生薏仁米的區别
熟薏仁米和生薏仁米的區别
最近逛糧油市場,發現薏仁米在衆多五谷雜糧中倍受冷落。然而,翻開典籍你會發現它的價值是值得你每天關注的。百度一下你更能發現它身上有許多不可忽視的價值。首先,它的味道是很特别的,這種味道可能是許多人冷落它的原因。其次,是因為它的堅硬,很難煮爛,...
2024-10-05
10個簡單的讀心術
10個簡單的讀心術
讀心術--是握住人的手,根據其無意識的活動所引起的反應來探測其物品隐藏的地方的一種技術,會讀心術的人一般較會察言觀色,懂得心理學,一般會給被試者心理暗示。要想讀懂一個人心裡在想什麼,需要看懂他的肢體語言,那麼怎麼才能讀懂對方的肢體語言呢?雙...
2024-10-05
飛蚊症是玻璃體混濁嗎
飛蚊症是玻璃體混濁嗎
飛蚊症是玻璃體混濁嗎?玻璃體混濁一般早起稱為,一般是由玻璃體變性引起的,是一種自然老化現象,也即随着年紀老化,玻璃體會“液化”,産生一些混濁物因而,飛蚊症正式的名稱是“玻璃體混沌”或稱“玻璃體浮物”眼前見黑點飛舞,飛蚊症是玻璃體内的不透明物...
2024-10-05
電視劇裡的穿幫
電視劇裡的穿幫
1.佟麗娅和言承旭真是養眼啊,佟麗娅是娛樂圈最美麗的演員啊,長得精緻古典!佟麗娅和言承旭在門口講話,佟麗娅露了啥?觀衆們注意佟麗娅的頭發,位置是不是變了?但是挺養眼啊…2.趙麗穎和易烊千玺兩大人氣流量明星在《青雲志》裡合作了一把,觀衆大飽眼...
2024-10-05
玉函路隧道全程
玉函路隧道全程
圖為民警在中老友誼隧道巡邏。磨憨邊檢站供圖圖為民警在中老友誼隧道巡邏。磨憨邊檢站供圖中新網西雙版納2月10日電題:中老友誼隧道:特殊的隧道,特殊的巡邏路作者鐘九生近日,雲南磨憨鐵路口岸夜色漸濃。18時40分許,随着當日最後一列入境列車邊檢手...
2024-10-05
Copyright 2023-2024 - www.tftnews.com All Rights Reserved