手写Promise.all

代码如下:

function promiseAll(ary) {
    if (Array.isArray(ary)) {
        return new Promise((resolve, reject) => {
            let idx = 0;
            let ful_cot = 0;
            let res_ary = [];
            ary.forEach((ele) => {
                let res_idx = idx;
                Promise.resolve(ele).then((res) => {
                    ful_cot++;
                    res_ary[res_idx] = res;
                    if (ful_cot === ary.length) {
                        resolve(res_ary);
                    }
                }, () => {
                    reject('reject!');
                });
                idx++;
            });
        });
    } else {
        console.log('请输入字符串...')
    }
}

有几个问题,

1、Promise.all传入数组如果出现第一个reject,后边的Promise还会执行吗? 会。因为Promise.all是异步返回reject Promise的,不影响其它正在执行的Promise。

2、Promise在new阶段就执行完毕,用then只是为了查看结果?错。Promise中可以放一些耗时的异步任务,比如用axios请求服务器等,这种任务当然不可能在创建Promise时就执行完毕。

3、Promise.all只能传入数组?错。可以传入任何符合迭代协议的迭代对象。数组、set、map或者是自定义的有迭代能力的对象。

4、Promise.all传入的数组中只能有Promise对象?错。如果你传入的不是Promise对象,这些值将被忽略,但仍然会被放在返回数组中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值