美文网首页
实现简易版 Promise.all

实现简易版 Promise.all

作者: Yandhi233 | 来源:发表于2022-01-24 22:26 被阅读0次

题目如下,要求打印出 ['p1', 'p2', 'p3']

function PromiseAll(promiseArray) {

    //   补全代码

}

function delay(data) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(data)
        }, Math.random() * 1000)
    })
}

const p1 = delay('p1')
const p2 = delay('p2')
const p3 = delay('p3')

PromiseAll([p1, p2, p3])
    .then(data => console.log(data))
    .catch(err => console.log(err))

  // 期待结果为 ['p1', 'p2', 'p3']

由于只考虑传入为数组的情况,结果如下

function PromiseAll(promiseArray) {
    return new Promise((resolve, reject) => {
        const promiseResult = []
        let count = 0
        for (let i = 0; i < promiseArray.length; i++) {
            promiseArray[i]
                .then(data => {
                    promiseResult[i] = data
                    count++
            //  这里不能直接使用 promiseResult.length 进行比较,因为不能保证 promiseArray[i] 执行完毕的顺序
                    if (count === promiseArray.length) {
                        resolve(promiseResult)
                    }
                })
                .catch(err => reject(err))
        }
    })
}

相关文章

网友评论

      本文标题:实现简易版 Promise.all

      本文链接:https://www.haomeiwen.com/subject/ugcihrtx.html