Kasan Blog

思路:

  1. 把需要监听的promise 放到数组做成一个集合

  2. 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)})