中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

Promise.all用于拒絕和解決

發(fā)布于:2021-02-18 00:00:34

0

221

0

Promise JavaScript catch

Promise已經(jīng)成為JavaScript的不可思議的補(bǔ)充。它們?yōu)槲覀児?jié)省了回調(diào)的麻煩,使異步編碼更易于維護(hù),并允許我們一次跟蹤多個(gè)異步進(jìn)程。  Promise.all 浮現(xiàn)在腦海中,讓我們?cè)诙鄠€(gè)諾言得到解決時(shí)做出反應(yīng)。不幸的是,Promise.all 只有在所有的Promise都得到解決時(shí)才解決,因此,如果任何一個(gè)Promise都失敗了,catch則調(diào)用而不是then:

Promise.all([
   Promise.resolve(1),
   Promise.reject(0)
])
.then(() => { console.log('resolved!'); })
.catch(() => { console.log('failed!') });
// >> failed!

如果您希望執(zhí)行相同的功能而不管陣列中的任何Promise是否被拒絕,這都是一個(gè)問(wèn)題。您可以提供與相同的功能then ,catch 但是這可能導(dǎo)致維護(hù)問(wèn)題,并偶爾出現(xiàn)“ WTF就是這個(gè)!”。其他工程師的評(píng)論。

那么,Promise.all 無(wú)論有何拒絕,我們都想觸發(fā)功能時(shí)該怎么辦?  杰克·阿奇博爾德有答案:

Promise.all(promises.map(p => p.catch(() => undefined)));

每個(gè)promise的catch 回調(diào)都會(huì)返回undefined ,從而使promise的失敗被視為成功。為了證明它可行,請(qǐng)考慮以下代碼段:

Promise.all([
   // Resolves
   Promise.resolve(1),
   // Rejects after 2 seconds
   new Promise((resolve, reject) => setTimeout(() => reject(1), 2000))
].map(p => p.catch(() => undefined))).then(() => console.log('done!'));

// >> done!

盡管第二個(gè)Promise被拒絕,但Promise.all then 仍被稱為!將來(lái),我們將能夠Promise.prototype.finally用來(lái)更輕松地處理成功和失敗。