问答

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

作者:admin 2021-08-21 我要评论

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

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

最近在做一个项目,现在同时有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中没有直接的支持,你可以设置一个外部变量,在每个任务完成的时候更新一下外部变量,这样就可以间接获取进度,不过这方案看上去不太优雅

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 使用箭头函数return数据不能实现

    使用箭头函数return数据不能实现

  • 个人小程序号能接入小程序3D地图吗?

    个人小程序号能接入小程序3D地图吗?

  • vue 移动端项目中,使用了better-scrol

    vue 移动端项目中,使用了better-scrol

  • css如何做出区域平均划分为四列

    css如何做出区域平均划分为四列

腾讯云代理商
海外云服务器