實現一個promise.all方法


思路:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM