成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于 JavaScript 中的 Promise,你應該知道的五件事

開發 前端
Promise 模式是現代 JavaScript 編程的必備條件。 使用 then/catch 鏈接看起來很簡單,但它有一些我們最好知道的細節。 這篇文章將帶來關于 Promise 的 5 件事。

Promise 模式是現代 JavaScript 編程的必備條件。 使用 then/catch 鏈接看起來很簡單,但它有一些我們最好知道的細節。 這篇文章將帶來關于 Promise 的 5 件事。

1. 反復解決

如果下面的代碼運行會發生什么?

new Promise(resolve => {
resolve(new Promise(resolve => {
resolve(new Promise(resolve => {
resolve(10)
}))
}))
})
.then(value => console.log(value)) // 10

then() 給你 10(不是 Promise 實例)。 如果解析的值是一個 Promise,那么它會解析直到它不能 then-able。

2.返回鏈

then() 鏈不僅是函數鏈,還是價值鏈。

Promise.resolve(10)
.then(value => value + 1)
.then(value => value + 1)
.then(value => console.log(value)) // 12

第一個 then() 為該值提供 10,第二個為 11,第三個為 12。它還對返回的值應用循環鏈,因此以下代碼的工作方式相同。

Promise.resolve(10)
.then(value => value + 1)
.then(value => Promise.resolve(value + 1))
.then(value => console.log(value)) // 12

3.then()的第二個參數

then() 實際上有 2 個參數。 第二個參數采用一個函數來處理拒絕的情況。 它與 catch() 的工作方式非常相似。 以下代碼的結果是相同的。

/// then() with second parameter
Promise.reject(10)
.then(
value => value + 1,
reason => handleError(reason), // reason=10
)/// then() and catch()
Promise.reject(10)
.then(value => value + 1)
.catch(reason => handleError(reason)) // reason=10

如果我們兩個都像下面這樣呢?

Promise.reject(10)
.then(
value => value + 1,
reason => handleError1(reason), // called
)
.catch(reason => handleError2(reason)) // not called

如果兩者都給出,則 then() 的第二個參數在 catch() 之前,因此調用了 handleError1() 而不會調用 handleError2()。 唯一的例外是 Promise 實際拋出錯誤的情況。 請參閱下面的代碼。

new Promise(() => { throw 'error' })
.then(
value => value + 1,
reason => handleError1(reason), // not called
)
.catch(reason => handleError2(reason)) // called

它僅在 catch() 子句中捕獲錯誤,因此調用了 handleError2()。 一個有趣的部分是,如果它沒有 catch(),即使使用 onReject 參數也會拋出錯誤。

4. then() 中拋出錯誤

如果 then() 中發生錯誤,它會在 catch() 子句中捕獲。

Promise.resolve(10)
.then(value => { throw 'error' })
.catch(reason => handleError(reason)) // catch!

5.錯誤作為一個值

如果我們嘗試用錯誤來解決,這聽起來很有趣。 你能想象下面的代碼會發生什么嗎?

Promise.resolve(new Error('error'))
.then(value => console.log(value)) // Error value
.catch(reason => handleError(reason))

它不會捕獲但會正常解析,因此它會記錄原始錯誤。 Promise 不賦予 Error 權限,而是 Promise 本身。

..和一個建議

Promise 模式對于處理異步作業很有用,但它通常涉及帶有嵌套 Promise 的曲線代碼。 它不利于閱讀,因此另一種選擇是使用 async/await。 現代 JavaScript 打包器提供了 async/await 語法的轉換。

責任編輯:華軒 來源: 七爪網
相關推薦

2024-01-09 14:57:22

2014-11-14 17:39:23

云計算

2012-02-07 13:29:35

2013-01-06 14:11:34

手機版Ubuntu系統

2010-09-02 18:56:09

NoSQL數據庫DBA

2018-08-23 08:21:54

TensorFlow機器學習人工智能

2021-05-19 18:23:40

物聯網IOT物聯網技術

2022-05-05 14:06:08

AWS云服務云計算專家

2019-01-08 17:00:39

2023-10-16 13:36:00

邊緣計算數據

2015-02-02 14:12:03

云桌面

2022-04-22 14:28:18

加密推特比特幣加密貨幣

2020-03-25 14:58:12

人工智能平安城市智慧城市

2015-03-11 11:23:38

MySQLPHP開發

2024-01-11 11:28:54

2022-11-16 14:23:37

JavaScript參數屬性

2019-02-19 09:34:53

工業物聯網IIOT物聯網

2020-08-10 15:30:24

XDR網絡安全網絡威脅

2018-03-22 16:32:49

大數據數據集數據處理

2015-08-11 17:55:21

谷歌重組科技
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久99 | 365夜爽爽欧美性午夜免费视频 | 天天干天天干 | 欧美性video 精品亚洲一区二区 | 亚洲精品视频一区 | 99久久婷婷国产综合精品电影 | 九九亚洲精品 | 999热视频 | 熟女毛片 | 伊人久久在线 | 欧美亚洲另类在线 | 毛片区 | 亚洲精品乱码久久久久久按摩观 | 国产一级片免费看 | 久久蜜桃av一区二区天堂 | 国产a一区二区 | 欧美精品三区 | 波多野结衣在线观看一区二区三区 | 狠狠视频| 国产精品123区 | 亚洲午夜在线 | 中文字幕福利 | 成人免费毛片在线观看 | 亚洲精品黄色 | 日韩国产欧美在线观看 | 中文字幕不卡一区 | 精品久久久久久久久久久久久久 | 亚洲aⅴ | 欧美视频一区二区三区 | 国产精品久久久久久一级毛片 | av国产在线观看 | 亚欧洲精品在线视频免费观看 | 91视频麻豆| 亚洲性在线| 91成人在线 | 国产日韩欧美精品 | 亚洲电影第1页 | 日韩一区不卡 | 久久亚洲二区 | 久久婷婷香蕉热狠狠综合 | 日韩精品一区二区三区在线播放 |