思路:
1:首先明白all的用法
2:promise.all可以接受一个由promise数组作为参数,并且返回一个promise实例,
3:promise.all([a,b,c...]).then方法之后的结果是一个数组,返回的数组是参数中依次执行的返回值
4: 参数中的promise有一个失败则全部失败
// 判断传递进来数组是否是promise,不是promise直接返回了 const isPromise = value => typeof value.then === 'function' Promise.all = function(promises){ return new Promise((resolve,reject) => { let arr = [] let idx = 0; const processData = (key,data) => { arr[key] = data; if(++idx === promises.length){ // 如果都成功了返回这个数组 resolve(arr) } } for(let i=0;i< promises.length;i++){ let result = promises[i]; if(isPromise(result)){ // 如果是promise ,通过then返回结果 result.then(data => { processData(i,data) // 让结果和索引对应上 },reject) }else{ processData(i,result) } } }) }