tft每日頭條

 > 圖文

 > es6新特性promise詳解

es6新特性promise詳解

圖文 更新时间:2024-12-16 08:06:28
簡介
本文隻是針對對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方法不一緻

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved