在JavaScript中,全部的代碼都是單線程執行的,這就致使了其全部的網絡請求,IO操做,瀏覽器時間等都是異步非阻塞的模式執行的,這就使得代碼的執行順序可能會超出咱們的掌控。瀏覽器
尤爲是當多個異步操做待執行,咱們須要控制它的順序的時候。這時通常的解決方法是回調,Generator,Promise或者await/async等,這裏我主要記錄Promise。網絡
Promise本質上是一個綁定了回調的對象,把執行代碼和結果代碼清晰的分離了。異步
一個Promise對象大體有三個狀態 :async
then函數其實有兩個回調函數successCallback和failureCallback。前者是成功時的回調,後者是失敗時的回調,通常狀況下咱們只用了第一個successCallback回調,失敗狀態靠catch來捕捉,其實本質上catch(failureCallback)
是 then(null, failureCallback)的縮寫,那麼能夠知道,這二者在大部分狀況下都相等,但在好比當successCallback中拋出了錯誤,此時第二個回調failureCallback是捕捉不到的,而catch能夠。
函數
在一個catch(即失敗操做)觸發後,並不影響後續的鏈式操做。線程
後續未完......code