zoukankan      html  css  js  c++  java
  • 假设把官方的promise.all去掉,实现自己的promise.all方法

    搞清题意了没?

    我们要搞清楚两个问题,

    1.

    let arr = []

    arr[3] = 'str'

    arr的长度是几,答案是3,

    2.

      function test(){
                return new Promise((resolve)=>{
                    setTimeout(()=>{
                        resolve(123)
                    },3000)
                })
            }
            Promise.resolve( 
                test()
            ).then((res)=>{
                console.log(res)
            })
    这个我们会等resolve结束再执行console.log(res)

    Promise本身有个all方法,首先我们把Promise.all = null 

    然后我们把

    Promise.all = promiseAll
            function promiseAll(param){
                if(!Array.isArray(param)){
                    throw new Error('param is not Array')  //首先判断下参数是不是数组
                }else{
                    return new Promise((resolve)=>{   //return Promise,因为我们知道Promise.all是返回的Promise
                        let _arr_ = []
                        let index = 0
                        if(param.length == 0){
                            resolve(_arr_)
                        }
                        function processPromise(i,data){
                            _arr_[i] = data
                            if(++index == param.length){ 
            //为什么我要重新定一个变量呢,如果换成_arr_.length会有什么问题呢
              //因为当在3秒的那个执行完,他会将数组的第三项赋值,会造成第二项为空值
              //输出结果很奇怪
                                resolve(_arr_)
                            }

                            
                        }
                        for(let i=0;i<param.length;i++){
                            Promise.resolve(param[i]).then((data)=>{
                                console.log(111)
                                processPromise(i,data)
                            }).catch((err)=>{
                                console.log(err)
                            })
                        }
                    })
                }
            }
     
    知道上面两个,我们就可以按顺序拿出我们想要的结果了
  • 相关阅读:
    python入门6 字符串拼接、格式化输出
    python入门5 运算符
    python入门3 python变量,id(),is运算符
    python入门2 python字符串换行显示、字符串太长连接多行
    python入门1 python手动编译py_compile,compileall
    测试笔记:jsonp跨域接口测试
    Jmeter入门16 数据构造之随机数Random Variable & __Random函数
    Jmeter入门15 JSON Assertion 适用于json格式的响应断言
    openshift 配置ldap认证
    openshift node资源限制
  • 原文地址:https://www.cnblogs.com/MDGE/p/12458078.html
Copyright © 2011-2022 走看看