手写promise.all

promise.all:

(1)传入一个可迭代对象:可以是数组、set、map

(2)返回的是一个数组,并且数组中的结果与传入的可迭代对象的顺序一致。

看了很多网上的手写promise,但大都是只判断了数组,没有判断可迭代类型。看了网上的好多博客写了这个promise.all。有问题的话,还请大家批评指正。

代码:

// 手写promise.all
        Promise.myAll = function(arr) {
            if(typeof arr[Symbol.iterator] !== 'function') {
                reject( new TypeError("传入的参数必须是一个迭代类型"))
            } 
            let length = arr.length || arr.size
            arr = Array.from(arr);  //将可迭代类型转换成数组,这样就可以得到每个可迭代对象对应的下标。
            if(length === 0) {
                resolve([])
            }
            let res = []
            let count = 0;
            return new Promise((resolve, reject)=>{
                arr.forEach((val,index)=>{
                    Promise.resolve(arr[index]).then(data=>{
                        res[index] = data;
                        count++;
                        if(count == length) {
                            resolve(res);
                        }
                    },err=>{
                        reject(err);
                    })
                })
            })
            
        }

你可能感兴趣的:(javascript,开发语言,ecmascript)