Promise中then和catch的執行過程

2021-10-12 08:02:25 字數 622 閱讀 4890

一直以來有個誤解,以為then和catch的執行就是乙個二選一的過程,直到後來遇到類似下面的**,發現不是這麼一回事

promise.reject().then(() => ).catch(() => )

promise.resolve().then(() => ).catch(() => )

執行結果自然是2-1 1-2

翻了一下then和catc**檔,catch是then的語法糖,catch(fn) 就是then(undefined, fn)

而promise.prototype.then(arg1, arg2)

兩個引數都是可選,如果arg1是undefined,而promise狀態是fullfilled

那麼arg1就相當於 x => x

如果arg2是undefined,promise的狀態是rejected,那麼arg2是乙個『thrower』

(mdn原文),結果應該就是throw error的意思

總之就是遇到引數為空的情況下,狀態往下順延。

所以每乙個then和catch都會執行,因此,才會**才會產生上面的執行結果。

總結,有時間,看原始碼,沒時間,看文件,才能正確理解

promise中all和race的區別

1 promise.all a,b 會將a,b的引數都一起返回 所用時間為a b 2 promise.race a,b 會將定時器時間執行時間短的引數返回 把以下 放在除錯工具,看列印結果的先後順序,以及列印時間就能明白了 const moviepromise new promise reslove...

Promise實現(更新中)

promise.js const pending pending const fullfilled fullfilled const rejected rejected function promise excutor 如果為pending,就轉化為失敗態 function reject reaso...

利用CA私鑰和證書建立中間CA

本文借助實驗環境下建立的root ca私鑰和證書進一步建立中間ca。為了便於區分,我們將建立中間ca intermediate ca 的ca稱為根ca root ca 關於如何使用openssl建立root ca。中間ca是root ca的 其證書由root ca簽發,同時中間ca能夠代表根ca簽發...