Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
214 views
in Technique[技术] by (71.8m points)

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...