代码如下:
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对象,这些值将被忽略,但仍然会被放在返回数组中