ES6的Promise知識點總結

簡介

本文只是針對對
Promise有一定控制的人士,列舉了Promise須要記着和控制的癥結點,不是講Promise的基礎知識。假如是進修Promise,請移步
阮一峰先生的博客

實行機遇

Promise新建後會馬上實行,同步的,然則resolved和rejected的回調函數是異步的,
然則它的回調是放在本輪輪迴的末端實行,並非放到下次事宜輪迴中實行。

Promise

三種狀況

  • pending (進行中)
  • fulfilled (已勝利)
  • rejected (已失利)
三種狀況只能是由pending到fulfilled,或由pending到rejected。狀況一旦轉變,不會再變。
在狀況轉變后再添加回調函數仍能馬上獲得效果,這是與事宜的區分,事宜完畢再去監聽,是得不到效果的。

Resolve

  • 參數會通報給then回調函數
  • 和rejected都不會停止後續代碼實行,resolved背面的代碼仍會實行,除非在resolved時return
  • 當resolved的參數是一個promise實例時,會守候上一個promise的狀況返回

Rejected

  • 參數通報給回調函數
  • 參數通常是Error對象的實例
  • 運轉拋出非常,狀況也會變成Rejected

catch

  • 不僅狀況變成rejected時會觸發,運轉中拋出的毛病也會被catch捕捉
  • resolve以後拋出的非常,不會被捕捉,狀況只會變動一次,變動后就不會轉變。
  • “冒泡”性子,一向向後通報,直到被捕捉。也就是說毛病一定會被背面的catch捕捉。
  • 假如不寫catch,promise有毛病時,不會有任何迴響反映,不會退出歷程、停止劇本實行,promise和外部代碼“斷絕”(將來能夠變動這劃定規矩)
  • 背面能夠繼承跟then和catch
  • 返回一個resolved狀況的promise對象,所以假如拋出一個毛病,只會觸發第一個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要領不一致

Promise.try

這個有須要一些技術儲備,後續補充。

    原文作者:code_sir
    原文地址: https://segmentfault.com/a/1190000014476633
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞