promise.all

static all(promises) {
    return new MyPromise((resolve, reject) => {
        /**
         * 返回值的集合
         */
        let values = []
        for (let [i, p] of promises.entries()) {
            /**
             * 数组参数如果不是MyPromise实例,先调用MyPromise.resolve
             */
            this.resolve(p).then(res => {
                console.log(i, res)
                values[i] = res // 按照参数数组的输入添加返回结果
                /**
                 * 所有状态都变成fulfilled时返回的MyPromise状态就变成fulfilled
                 */
                let removeEmpty = values.filter(val => val) // 可能出现空位,可以利用filter跳过空位的特性
                if (removeEmpty.length === promises.length) resolve(values)
            }, err => {
                /**
                 * 有一个被rejected时返回的MyPromise状态就变成rejected
                 */
                reject(err)
            })
        }
    })
}

你可能感兴趣的:(promise.all)