美文网首页
Promise.all 实现

Promise.all 实现

作者: McDu | 来源:发表于2021-11-17 10:55 被阅读0次
    1. 用数组下标的方式保证promise有序
    Promise.all = function(arr) {
        let results = []
        let count = 0
        
        return new Promise((resolve, reject) => {
    
            arr.forEach((p, i) => {
    
                Promise.resolve(p).then(res => {
                    count++
                    results[i] = p;
    
                    if(count === arr.length) {
                        resolve(results)
                    }
                }).catch(err => {
                    reject(err)
                })
            });
        });
    }
    

    测试代码

    let p1 = 1;
    let p2 = new Promise((resolve) => {
        setTimeout(() => {
            resolve(2)
        }, 2000)
    });
    let p3 = new Promise((resolve) => {
        setTimeout(() => {
            resolve(3)
        }, 1000)
    });
    let p4 = Promise.reject(4)
    
    let res1 = Promise.all([p1, p2, p3])
    let res2 = Promise.all([p1, p2, p4])
    
    res1.then(res => {
        console.log(res)
       // 1 promise2 promise3
    }
    
    res2.then(res => {
        console.log(res)
    }).catch(err => {
        console.log(err)
       // 4
    })
    
    

    相关文章

      网友评论

          本文标题:Promise.all 实现

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