Angular Async HTTP请求未异步发送

Joh*_*ton 8 angular angular-httpclient

从本质上来说,我的问题是-我有6个不同的端点返回不同的数字-我希望能够异步发送6个请求,但是使用chrome工具,我看到它们不按顺序运行。

  ngOnInit() {
    private readonly TEMP_URL: string = 'https://www.random.org/integers/?num=1&min=1&max=100000&col=1&base=10&format=plain&rnd=new';
    const result1 = this.http.get<Number>(this.TEMP_URL);
    const result2 = this.http.get<Number>(this.TEMP_URL);
    const result3 = this.http.get<Number>(this.TEMP_URL);
    const result4 = this.http.get<Number>(this.TEMP_URL);
    const result5 = this.http.get<Number>(this.TEMP_URL);
    const result6 = this.http.get<Number>(this.TEMP_URL);
    const result7 = this.http.get<Number>(this.TEMP_URL);


    forkJoin(result1,result2,result3,result4,result5,result6,result7).subscribe(results  => {
                    this.retVal0= results[0];
                    this.retVal1 = results[1];
                    this.retVal2 = results[2];
                    this.retVal3= results[3];
                    this.retVal4= results[4];
                    this.retVal5= results[5];
                    this.retVal6= results[6];
                    this.retVal7= results[7];
            });
  };
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Din*_*ino 3

你的代码没问题,问题直接来自Chrome。通过检查请求,您可以看到它们已停止/排队。如果您在另一个浏览器(Firefox)中进行相同的检查,您将看到请求是以异步方式发出的,没有排队。

排队或停滞的请求

对单个域发出的请求过多。在 HTTP/1.0 或 HTTP/1.1 连接上,Chrome 允许每个主机最多同时存在 6 个 TCP 连接。

请记住,位于代理后面会降低最大同时请求数 - 这意味着即使有两个请求,您也可能会收到停滞的请求。

不好的是,您无法通过编辑 Angular 代码来解决此问题。可能的修复仅包括网络设置修改:

  • 如果必须使用 HTTP/1.0 或 HTTP/1.1,请实施域分片
  • 使用 HTTP/2。不要将域分片与 HTTP/2 结合使用。
  • 删除或推迟不必要的请求,以便可以更早下载关键请求