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)
            })
        }
    })
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容