一個(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