關於Promise的記錄和理解

在JavaScript中,全部的代碼都是單線程執行的,這就致使了其全部的網絡請求,IO操做,瀏覽器時間等都是異步非阻塞的模式執行的,這就使得代碼的執行順序可能會超出咱們的掌控。瀏覽器

尤爲是當多個異步操做待執行,咱們須要控制它的順序的時候。這時通常的解決方法是回調,Generator,Promise或者await/async等,這裏我主要記錄Promise。網絡

Promise本質上是一個綁定了回調的對象,把執行代碼和結果代碼清晰的分離了。異步

一個Promise對象大體有三個狀態 :async

  • pending: 初始狀態,既不是成功,也不是失敗狀態。
  • fulfilled: 操做成功完成。
  • rejected: 操做失敗。

then函數其實有兩個回調函數successCallback和failureCallback。前者是成功時的回調,後者是失敗時的回調,通常狀況下咱們只用了第一個successCallback回調,失敗狀態靠catch來捕捉,其實本質上catch(failureCallback) 是 then(null, failureCallback)的縮寫,那麼能夠知道,這二者在大部分狀況下都相等,但在好比當successCallback中拋出了錯誤,此時第二個回調failureCallback是捕捉不到的,而catch能夠。函數

在一個catch(即失敗操做)觸發後,並不影響後續的鏈式操做。線程

後續未完......code

相關文章
相關標籤/搜索