Open zxdfe opened 2 years ago
Promise.all = function (promises) { // 返回的结果是一个promise return new Promise((resolve, reject) => { let num = 0 let arr = [] // 需要确认每一个promise的状态,这里选择遍历数组 for (let i = 0; i < promises.length; i++) { // 这里有两种结果,失败与成功 promises[i].then(r => { // 成功的promise会调用第一个函数 num++ // 这里不能直接用push添加到数组中,会改变 // 返回的成功态的promise的排列顺序 // arr.push(r) arr[i] = r // 当数组的长度等于与num相等时证明所有promise状态为成功 if (num === promises.length) { resolve(arr) } }, v => { // 一旦有一个promise失败则直接调用reject reject(v) }) } })