思路:
把需要监听的promise 放到数组做成一个集合
myAll 接收这个数组,并返回一个promise,这个promise 遍历传入数组里的promise ,每一个成功的promise 把数据返回到 results 里,失败的直接上报
const x = fetch('https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js')
const x1 = fetch('https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js')
// Promise.all([x]).then(()=>{console.log('success')}).catch(()=>{console.log('fail')})
myAll = function(arr){ // 接收一个数组,数组是需要全部成功的 promise的集合
const results = [] // 成功项的响应集合
let count = 0 // 成功了多少项,如果成功项与 arr 的length相同,说明全部成功,否则失败
return new Promise((resolve,reject)=>{
arr.map( (promise , index) => { // 遍历数组的promise,每一个promise 返回成功的数据放到results,失败的直接上报
promise.then((r)=>{
console.log(r)
results[index] = r
count += 1
console.log(count)
if(count === arr.length){
resolve(results)
}
},(err)=>{
reject(err)
})
})
})
}
myAll([x,x1]).then((data)=>{console.log(data)})