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

關(guān)于 JavaScript 中的 Promise,你應(yīng)該知道的五件事

開(kāi)發(fā) 前端
Promise 模式是現(xiàn)代 JavaScript 編程的必備條件。 使用 then/catch 鏈接看起來(lái)很簡(jiǎn)單,但它有一些我們最好知道的細(xì)節(jié)。 這篇文章將帶來(lái)關(guān)于 Promise 的 5 件事。

Promise 模式是現(xiàn)代 JavaScript 編程的必備條件。 使用 then/catch 鏈接看起來(lái)很簡(jiǎn)單,但它有一些我們最好知道的細(xì)節(jié)。 這篇文章將帶來(lái)關(guān)于 Promise 的 5 件事。

1. 反復(fù)解決

如果下面的代碼運(yùn)行會(huì)發(fā)生什么?

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

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

2.返回鏈

then() 鏈不僅是函數(shù)鏈,還是價(jià)值鏈。

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

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

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

3.then()的第二個(gè)參數(shù)

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

/// 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

如果我們兩個(gè)都像下面這樣呢?

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

如果兩者都給出,則 then() 的第二個(gè)參數(shù)在 catch() 之前,因此調(diào)用了 handleError1() 而不會(huì)調(diào)用 handleError2()。 唯一的例外是 Promise 實(shí)際拋出錯(cuò)誤的情況。 請(qǐng)參閱下面的代碼。

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

它僅在 catch() 子句中捕獲錯(cuò)誤,因此調(diào)用了 handleError2()。 一個(gè)有趣的部分是,如果它沒(méi)有 catch(),即使使用 onReject 參數(shù)也會(huì)拋出錯(cuò)誤。

4. then() 中拋出錯(cuò)誤

如果 then() 中發(fā)生錯(cuò)誤,它會(huì)在 catch() 子句中捕獲。

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

5.錯(cuò)誤作為一個(gè)值

如果我們嘗試用錯(cuò)誤來(lái)解決,這聽(tīng)起來(lái)很有趣。 你能想象下面的代碼會(huì)發(fā)生什么嗎?

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

它不會(huì)捕獲但會(huì)正常解析,因此它會(huì)記錄原始錯(cuò)誤。 Promise 不賦予 Error 權(quán)限,而是 Promise 本身。

..和一個(gè)建議

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

責(zé)任編輯:華軒 來(lái)源: 七爪網(wǎng)
相關(guān)推薦

2024-01-09 14:57:22

2014-11-14 17:39:23

云計(jì)算

2012-02-07 13:29:35

2013-01-06 14:11:34

手機(jī)版Ubuntu系統(tǒng)

2010-09-02 18:56:09

NoSQL數(shù)據(jù)庫(kù)DBA

2018-08-23 08:21:54

TensorFlow機(jī)器學(xué)習(xí)人工智能

2021-05-19 18:23:40

物聯(lián)網(wǎng)IOT物聯(lián)網(wǎng)技術(shù)

2022-05-05 14:06:08

AWS云服務(wù)云計(jì)算專(zhuān)家

2019-01-08 17:00:39

2015-02-02 14:12:03

云桌面

2023-10-16 13:36:00

邊緣計(jì)算數(shù)據(jù)

2022-04-22 14:28:18

加密推特比特幣加密貨幣

2020-03-25 14:58:12

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

2015-03-11 11:23:38

MySQLPHP開(kāi)發(fā)

2024-01-11 11:28:54

2022-11-16 14:23:37

JavaScript參數(shù)屬性

2019-02-19 09:34:53

工業(yè)物聯(lián)網(wǎng)IIOT物聯(lián)網(wǎng)

2020-08-10 15:30:24

XDR網(wǎng)絡(luò)安全網(wǎng)絡(luò)威脅

2015-08-11 17:55:21

谷歌重組科技

2018-03-22 16:32:49

大數(shù)據(jù)數(shù)據(jù)集數(shù)據(jù)處理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品污www一区二区三区 | 玖玖久久 | 91看片在线观看 | 啪视频在线 | 黑人巨大精品欧美一区二区一视频 | 99精品久久| 91精品国产色综合久久不卡98 | 97伦理电影 | 精品视频网 | 97免费视频在线观看 | 日本精品视频在线 | 亚洲精彩视频 | 91视频网址 | 国产麻豆乱码精品一区二区三区 | 国产精品成人一区二区 | 日韩欧美高清dvd碟片 | 国产不卡在线观看 | 午夜视频在线观看视频 | 午夜视频在线视频 | 国产精品3区 | 精品一区二区三区不卡 | 人人性人人性碰国产 | 欧美在线a| 国产精品一区二区三区久久 | 中文字幕在线观看日韩 | 毛片一区二区三区 | 成人精品国产 | 伊人电影院av | 亚洲国产精品久久久久秋霞不卡 | av在线天堂| 国产 日韩 欧美 制服 另类 | 亚州综合一区 | 久久在线精品 | 日韩在线一区二区 | 久久精品在线 | 日韩欧美手机在线 | 中文一区二区视频 | 精品区一区二区 | 国产精品免费播放 | 亚洲国产成人精品女人久久久 | 国产精品国产a级 |