Promise.all() 是 JavaScript 中的一个内置方法,它接受一个 Promise 可迭代对象,并返回一个新的 Promise。这个新 Promise 仅在可迭代对象中的所有 Promise 都已成功时才会被满足,或者在可迭代对象中的任何 Promise 被拒绝时立即被拒绝。Promise.all() 的 Promise 的值是可迭代对象中已满足的 Promise 的值的数组,按照可迭代对象中 Promise 的顺序排列。
-
从
promiseAll函数返回一个新Promise。 -
如果输入数组为空,立即用一个空数组解析它并返回。
-
初始化一个数组
res以保存结果,最初填充为null。 -
初始化一个
resolvedCount变量,用于跟踪已解析的Promise数。 -
迭代 Promise 返回函数的数组。对于每个返回
Promise的函数:- 在
async/await版本中,等待 Promise。在解析时,将结果放入res数组中的相应位置并增加resolvedCount。如果引发错误,立即用错误拒绝Promise。 - 在
then/catch版本中,附加一个then子句和一个catch子句。在解析时,then子句将结果放入res数组中并增加resolvedCount。catch子句用错误拒绝Promise。
- 在
async/await 写法
const promiseAll = function(functions) {
return new Promise(function(resolve, reject) {
if (functions.length === 0) {
return resolve([])
}
const res = new Array(functions.length).fill(null)
let resolvedCount = 0
functions.forEach(async function(el,index) {
try{
res[index] = await el()
resolvedCount++
if (resolvedCount === functions.length) {
resolve(res)
}
} catch (error) {
reject(error)
}
})
})
}
then/catch 写法
const promiseAll = function (functions) {
return new Promise((resolve, reject) => {
if (functions.length === 0) {
return resolve([])
}
const res = new Array(functions.length).fill(null)
let resolvedCount = 0
functions.forEach((el,index) => {
el().then((itemResult) => {
res[index] = itemResult
resolvedCount++
if (resolvedCount === functions.length) {
resolve(res)
}
}).catch((err) => {
return reject(err)
})
})
})
}
浙公网安备 33010602011771号