非同步程式設計 Promise任務鏈

2021-08-28 11:44:38 字數 1554 閱讀 5181

講解promise任務鏈之前先看乙個例子

new promise( (resolve, reject) =>  ).then( 

() => ,

() =>

).then(

() => ,

() =>

);

猜猜控制台會列印什麼東西呢,正確答案是

'reject', 2

'resolve', 3

想知道為什麼,繼續往下看

promise chainthen函式執行後會返回乙個新的promise物件

如果then沒有傳入處理函式,那麼會返回乙個繼承了上乙個處理狀態的 promise 物件

new promise( (resolve, reject) =>  ).then().then(() => ,() => )
上面**會列印2。

如果then傳入處理函式,那麼預設返回乙個 fulfilled/resolved 狀態的 promise 物件

new promise( (resolve, reject) =>  ).then(() => ,() => ).then(() => ,() => )
上面**會列印2,3

如果then傳入了處理函式,通過處理函式顯示的return了乙個新的 promise,那麼返回這個顯示的 promise 物件

new promise( (resolve, reject) =>  ).then(() => ,() => )

}).then(() => ,() => )

上面**會列印2,4。

到這裡一開始的問題就清楚了。但是,還會導致乙個問題

問題:不易中途終止後續任務執行

看下面乙個例子就知道了

列印結果為

上面當他不是管理員的時候,我們根本就不想讓他拿到資源,甚至都不想發這個請求,那怎麼辦呢? 

.catch方法     

處理 rejected 的情況,與 then 的第二個引數 onrejected 相同     

返回乙個 promise 物件,狀態預設為 fulfilled/resolved     

可以捕獲 catch 之前的 promise chain 中的任一錯誤(如果 promise chain 中的 then 沒有處理的話)

Promise 非同步程式設計

promise 是非同步程式設計的解決方案,他代表承諾,便是一定會丟擲兩種狀態,狀態一經確定就不會改變 編譯成功 resolve value 為 必選 編譯失敗 reject error 可選 使用then 接收正確的丟擲 then 後面接 catch function error 可以簡寫為fun...

Promise非同步程式設計

當我們用 ajax去請求有依賴的多個資料的時候,編寫會形成漏斗形狀的結構,可讀性差,可以使用es6提供的promise promise概述 promise是非同步程式設計的一種解決方案,從語法上講,promise是乙個物件,從它可以獲得非同步操作的訊息 使用promise有以下好處 可以避免多層非同...

Promise非同步程式設計

例項化promise物件,建構函式中傳遞函式,該函式中用於處理非同步任務 resolve和reject兩個引數用於處理成功和失敗兩種情況,並通過p.then獲取處理結果 在呼叫then時可以只傳入正常情況函式處理,不傳入異常情況函式,即只處理成功情況 我們使用new來構建乙個promise prom...