思路:
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) } } }) }