最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

JavaScript中Promise.all和Promise.race方法的介紹(附代碼)

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:27:13
文檔

JavaScript中Promise.all和Promise.race方法的介紹(附代碼)

JavaScript中Promise.all和Promise.race方法的介紹(附代碼):本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于JavaScript中Promise.all和Promise.race方法的介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。Promise.all() 方法接受一個(gè)包含 Promise 對(duì)象或普通值的數(shù)組(或其它可迭代對(duì)象)作為參數(shù)
推薦度:
導(dǎo)讀JavaScript中Promise.all和Promise.race方法的介紹(附代碼):本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于JavaScript中Promise.all和Promise.race方法的介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。Promise.all() 方法接受一個(gè)包含 Promise 對(duì)象或普通值的數(shù)組(或其它可迭代對(duì)象)作為參數(shù)

本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于JavaScript中Promise.all和Promise.race方法的介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

Promise.all() 方法接受一個(gè)包含 Promise 對(duì)象或普通值的數(shù)組(或其它可迭代對(duì)象)作為參數(shù),并返回一個(gè) Promise。當(dāng)所有 Promise 對(duì)象都 resolve 后,將所有 resolve 值以數(shù)組形式作為 Promise.all() resolve 的結(jié)果。如果其中之一的 Promise 被 reject,立即以第一個(gè) reject 的值作為 Promise.all() reject 結(jié)果。

在實(shí)際應(yīng)用中,如果需要從幾個(gè)接口獲取數(shù)據(jù),并且要在所有數(shù)據(jù)到達(dá)后才執(zhí)行某些操作,就可以使用Promise.all()。

const p1 = new Promise(function (resolve) { setTimeout(resolve, 200, 1) })
const p2 = Promise.resolve(2)
const p3 = 3
Promise.all([p1, p2, p3]).then(function (res) { console.log(res) }) // [1,2,3]

以下是代碼實(shí)現(xiàn),需要一個(gè)計(jì)數(shù)器,來(lái)確認(rèn)所有 promise 對(duì)象都已經(jīng) resolved,之后返回結(jié)果。需要一個(gè)數(shù)組,按順序記錄返回結(jié)果。如果使用類(lèi)似 for (var i = 0; i < iterable[i]; i++) 的方式遍歷,為避免閉包只能傳入變量引用的問(wèn)題,需要嵌套一層自執(zhí)行函數(shù)。這里使用 for ... in 循環(huán),使函數(shù)可以支持除數(shù)組外的其它可迭代對(duì)象,如數(shù)據(jù)結(jié)構(gòu) Set。

const all = function (iterable) {
 return new Promise(function (resolve, reject) {
 let count = 0, ans = new Array(count)
 for (const i in iterable) {
 const v = iterable[i]
 if (typeof v === 'object' && typeof v.then === 'function') {
 v.then(function (res) {
 ans[i] = res
 if (--count === 0) resolve(ans)
 }, reject)
 count++
 } else {
 ans[i] = v
 }
 }
 })
}

const p1 = new Promise(function (resolve) { setTimeout(resolve, 200, 1) })
const p2 = Promise.resolve(2)
const p3 = 3
all([p1, p2, p3]).then(function (res) { console.log(res) }) // [1,2,3]

同 Promise.all(),Promise.race() 方法接受一個(gè)包含 Promise 對(duì)象或普通值的數(shù)組(或其它可迭代對(duì)象)作為參數(shù),并返回一個(gè) Promise。一旦其中之一的 Promise 對(duì)象 resolve 以后,立即把 resolve 的值作為 Promise.race() resolve 的結(jié)果。如果其中之一的對(duì)象 reject,Promise.race也會(huì)立即 reject。

在實(shí)際應(yīng)用中,如果可以從幾個(gè)接口獲取相同的數(shù)據(jù),哪個(gè)接口數(shù)據(jù)先到就先用哪個(gè),就可以使用Promise.race(),所需時(shí)間等于其中最快的那個(gè)接口。下面是代碼:

const race = function (iterable) {
 return new Promise(function (resolve, reject) {
 for (const i in iterable) {
 const v = iterable[i]
 if (typeof v === 'object' && typeof v.then === 'function') {
 v.then(resolve, reject)
 } else {
 resolve(v)
 }
 }
 })
}
const p1 = new Promise(function (resolve) { setTimeout(resolve, 200, 1) })
const p2 = new Promise(function (resolve) { setTimeout(resolve, 100, 2) })
race([p1, p2]).then(function (res) { console.log(res) }) // 2

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript中Promise.all和Promise.race方法的介紹(附代碼)

JavaScript中Promise.all和Promise.race方法的介紹(附代碼):本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于JavaScript中Promise.all和Promise.race方法的介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。Promise.all() 方法接受一個(gè)包含 Promise 對(duì)象或普通值的數(shù)組(或其它可迭代對(duì)象)作為參數(shù)
推薦度:
標(biāo)簽: 方法 介紹 all
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top