在promise.all 是否可以知道请求完成的进度?

发布于 2022-09-12 02:34:42 字数 112 浏览 15 评论 0

最近在做一个项目,现在同时有8个请求同时发送,在进入这个页面的时候需要做个进度展示,我想通过请求成功的数量来表示页面数据是否可以展示
所以想知道是否可以在promise.all中获取到已经成功的响应的数量

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陈独秀 2022-09-19 02:34:42

无法知道。但你不是可以在每个任务结束时获取进度嘛。

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 仅为统计,你可以自己加上回调函数之类的逻辑。

颜漓半夏 2022-09-19 02:34:42

api中没有直接的支持,你可以设置一个外部变量,在每个任务完成的时候更新一下外部变量,这样就可以间接获取进度,不过这方案看上去不太优雅

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文