一個(gè)前端面試問題,一個(gè)頁面被遮罩住虹统,直到接收完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,無論每個(gè) promise 執(zhí)行結(jié)果是 fulfilled 還是 rejected苔严,總是會(huì)等待所有的(最慢的) promise 執(zhí)行完畢定枷,并且拿到所有的結(jié)果。
image.png