最近在做一个项目,现在同时有8个请求同时发送,在进入这个页面的时候需要做个进度展示,我想通过请求成功的数量来表示页面数据是否可以展示
所以想知道是否可以在promise.all中获取到已经成功的响应的数量
无法知道。但你不是可以在每个任务结束时获取进度嘛。
let successCount = 0, failCount = 0;
Promise.all([
request1()
.then((res) => {
successCount++;
return Promise.resolve(res);
})
.catch((err) => {
failCount++;
return Promise.reject(err);
}),
request2()
.then((res) => {
successCount++;
return Promise.resolve(res);
})
.catch((err) => {
failCount++;
return Promise.reject(err);
})
]);
或者觉得太啰嗦可以抽一个方法出来:
function dosomething(tasks = []) {
let successCount = 0, failCount = 0;
return Promise.all(
tasks.map(func => {
return func()
.then((res) => {
successCount++;
return Promise.resolve(res);
}).catch((err) => {
failCount++;
return Promise.reject(err);
})
})
);
}
dosomething([request1, request2]);
P.S. 两个 count 仅为统计,你可以自己加上回调函数之类的逻辑。
###api中没有直接的支持,你可以设置一个外部变量,在每个任务完成的时候更新一下外部变量,这样就可以间接获取进度,不过这方案看上去不太优雅