AngularJS Http请求同步处理?

问题描述:

我在我的AngularJS(1.6.3)应用程序中发现了一个奇怪的行为,我无法解释。AngularJS Http请求同步处理?

我做什么

我通过$state.go('.', {path: 'newPath'})和两个兄弟组件的动态参数更改为变化作出反应,他们$doCheck方法,如:

$doCheck() { 
    if(this.path !== this.$stateParams.path) { 
    this.path = this.$stateParams.path; 

    this.handleNewPath(this.path); 
    } 
} 

两个组件做HTTP请求。我的问题出现了。

预期的行为

由组件发起的请求不会互相影响。两者都处理完全孤立的回应。因此,有时候组件A首先得到它的响应,而不是先处理它,有时组件B会更快。

实际行为

组分A发起请求,这需要大约550ms(450内容下载)。只要内容没有完全下载,就不会执行其他请求。

我的问题

为什么AngularJS这样的表现在这种情况下?我以前没有确定过这样的事情。通常,许多请求可以在并行中启动。

奇怪行为 enter image description here

正常行为

enter image description here

更新

组分B包括Highchart。当我禁用该图表时,所以请求被启动,但不处理响应,请求的阻止似乎没有了。

+0

这看起来像一个AngularJS问题,并不直接连接到Highcharts。你对Highcharts有任何问题吗? –

我相信,我发现了这个问题。

得到highcharts数据不是一个,那花了这么长时间,这是我的错误读控制台的请求......

问题是

的响应数据highcharts原因highcharts开始渲染新数据,因此浏览器会重新渲染布局,这是一个同步过程。每个可能在渲染过程中发出的请求在渲染过程之后排队,并且控制台(可能有故障)显示的内容下载持续时间为450毫秒,实际上是浏览器渲染高分辨率所需的时间。

因此,我很抱歉提供了有误导性的信息,但实际上我并不确定错误来自哪里。