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)
                            })
                        }
                    })
                }
            }
     
    知道上面两个,我们就可以按顺序拿出我们想要的结果了
  • 相关阅读:
    arcgis 9.3安装步骤
    ENVI分类介绍
    转 经典的KNN算法解释
    彩色图像增强方法
    android中怎么让 button组件居中显示
    Android异步查询框架AsyncQueryHandler使用简介
    解决android中checkbox全部选择的操作
    System.exit(0)和System.exit(1)区别
    Andye献礼2013Android开发各种小功能大全(第一版)
    Android中退出多个Activity的两个经典方法
  • 原文地址:https://www.cnblogs.com/MDGE/p/12458078.html
Copyright © 2011-2022 走看看