• 假设把官方的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)
                            })
                        }
                    })
                }
            }
     
    知道上面两个,我们就可以按顺序拿出我们想要的结果了
  • 相关阅读:
    NDBCLuster && MySQL Cluster 转
    Publisher FAQ | Readability: Enjoy Reading. Support Writing.
    Eucalyptus Cloud Computing Software
    Oracle Coherence
    hbase note
    使用python代码实现三叉搜索树高效率”自动输入提示”功能
    Facebook 的系统架构 肇凯博客
    CentOS Linux 环境 Rails 安装记录
    linux socket网络编程进阶推荐阅读开源项目转
    HandlerSocket
  • 原文地址:https://www.cnblogs.com/MDGE/p/12458078.html
Copyright © 2020-2023  润新知