【问题标题】:AngularJS Http Requests processed synchronously?AngularJS Http请求同步处理?
【发布时间】:2017-10-06 20:13:43
【问题描述】:

我在我的 AngularJS (1.6.3) 应用程序中发现了一个奇怪的行为,我无法解释。

我做什么

我通过$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 在这种情况下会这样?我以前没有确定过这样的事情。通常,可以并行发起许多请求。

奇怪的行为

正常行为

更新

组件 B 包括一个 Highchart。当我禁用该图表时,请求被启动,但响应未被处理,请求的阻塞似乎消失了。

【问题讨论】:

  • 这看起来像一个 AngularJS 问题,并没有直接连接到 Highcharts。你对 Highcharts 有什么问题吗?

标签: javascript angularjs highcharts xmlhttprequest


【解决方案1】:

我相信,我发现了问题。

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

问题是

对 highcharts 的响应数据导致 highcharts 开始渲染新数据,因此浏览器重新渲染布局,这是一个同步过程。每个可能“同时”渲染的请求都在渲染过程之后排队,控制台(可能有故障)显示内容下载持续时间为 450 毫秒,这是浏览器渲染高图所需的实际时间。

所以,我很抱歉提供了误导性信息,但我实际上并不确定错误首先来自哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多