zoukankan      html  css  js  c++  java
  • 实现一个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)
          }
        }
      })
      
    }
  • 相关阅读:
    Celery
    高并发架构
    websocket
    git分支管理
    auto_ptr与shared_ptr
    UDP信号驱动IO
    TCP带外数据
    UDP广播
    获取mac地址
    char数组初始化
  • 原文地址:https://www.cnblogs.com/qqfontofweb/p/13258101.html
Copyright © 2011-2022 走看看