Promise.all() 一個(gè)前端面試問題,一個(gè)頁(yè)面被遮罩住,直到接收完10個(gè)請(qǐng)求后才會(huì)顯示,怎么判斷請(qǐng)求全部被接收了?

一個(gè)前端面試問題,一個(gè)頁(yè)面被遮罩住,直到接收完10個(gè)請(qǐng)求后才會(huì)顯示,怎么判斷請(qǐng)求全部被接收了?

//以下代碼,可直接復(fù)制到瀏覽器控制臺(tái)運(yùn)行。
//代碼展示的是 request3 最慢,也就是 3s 后,才能拿到所有數(shù)據(jù)。
//可以將任意一個(gè) request 的 resolve() 改成 reject,就會(huì)發(fā)現(xiàn)返回的是錯(cuò)誤信息了

const request1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(1)
  }, 1000)
})
const request2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(2)
  }, 1000)
})
const request3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(3)
  }, 3000)
})
const request4 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(4)
  }, 1000)
})
const request5 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(5)
  }, 1000)
})

const fun = async () => {
  const result = await Promise.all([request1, request2, request3, request4, request5])
  console.log(result)      //[1, 2, 3, 4, 5]
}
fun()

Promise.all()
1,全部 promise 執(zhí)行結(jié)果為 fulfilled 時(shí),then() 方法執(zhí)行
2,只要有一個(gè) promise 執(zhí)行結(jié)果為 rejected 時(shí),catch() 方法執(zhí)行
3,注意,不會(huì)再等待其他的 promise 執(zhí)行了,直接返回第一個(gè)執(zhí)行為 rejected 的結(jié)果。

Promise.allSettled()
1,無(wú)論每個(gè) promise 執(zhí)行結(jié)果是 fulfilled 還是 rejected,總是會(huì)等待所有的(最慢的) promise 執(zhí)行完畢,并且拿到所有的結(jié)果。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容