首页 > 其他 > 详细

手写一个Promise.all

时间:2021-06-17 21:25:17      阅读:21      评论:0      收藏:0      [点我收藏+]

Promise.all 特性:

1. 按顺序返回结果数组;

2. 当所有promise成功才返回;

3. 返回第一个报错的promise的信息;

直接上代码:

Promise._all = function(args) {
    var count = 0;
    var len = args.length;
    let results = [];
    return new Promise((resolve, reject) => {
        for (let i = 0; i < len; i++) {
            Promise.resolve(args[i])
                .then(r => {
                    count++;
                    results[i] = r;
                    if (count == len) {
                        resolve(results);
                    }
                })
                .catch(e => {
                    reject(e);
                });
        }
    });
};

var promise1 = new Promise(resolve => setTimeout(resolve.bind(this, 1), 100));
var promise2 = new Promise(resolve => setTimeout(resolve.bind(this, 2), 50));
// var promise2 = new Promise((resolve, reject) =>
//     setTimeout(reject.bind(this, new Error(‘故意抛出错误‘)), 200)
// );

Promise._all([promise1, promise2])
    .then(values => {
        console.log(‘values:‘, values);
    })
    .catch(e => {
        console.log(‘error:‘, e.message);
    });

到此结束

手写一个Promise.all

原文:https://www.cnblogs.com/alone4436/p/14896870.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!