如何以角度进行多个异步并行提取调用而不等待响应

时间:2019-07-08 23:55:22

标签: angular typescript promise async-await observable

我正在尝试发出并行访存/ http.get请求,但是我不能异步执行此操作(大约有400个http get调用)。 在发出这些请求时,我的浏览器冻结了。 所以我想使调用异步,以便不等待功能完成

我尝试使用异步,但无法使其异步

async cacheNext(){
      console.log("Caching Images")
      this.cacheImages(imagearray)
      console.log("Cached Images")
    }
  }

async cacheImages(imagearray){
    imagearray.forEach(img => {
      fetch(img)
    });
  }


OR 

async cacheImages(imagearray){
    imagearray.forEach(img => {
      this.http.get(img).toPromise()
    });
  }

我希望cacheImages函数能够运行,但是cacheNext完成

1 个答案:

答案 0 :(得分:1)

正如其他人所评论的那样,如果您进行400个http调用,则可能存在设计/体系结构问题。

此外,要进行多个并行的http调用,并获得包含所有结果的单个回调,我建议使用rxjs和forkJoin。

如果您正在进行Angular开发,那么学习和熟悉rxjs可能是您的最大利益,因为很多框架都建立在该框架上。在我看来,将所有内容转换为Promises只是多余的,不必要的工作。

Rxjs擅长处理涉及多个异步调用和其他复杂异步问题的情况。根据我的经验,这些复杂的情况很难用诺言处理。