angular HTTP请求触发两次变更检测 HTTP请求可能会触发两次变更检测,

webghufk  于 5个月前  发布在  Angular
关注(0)|答案(3)|浏览(94)

🐞 bug报告

受影响的软件包

@angular/http@6.1.10
zone.js@0.8.26

描述

通过 HttpClient#get 发起的 HTTP 请求在响应可用时触发两次变更检测。

🔬 最小复现

有一个最小示例在 https://stackblitz.com/edit/angular-issue-repro2-upg7ax
在这个示例中,AppComponent#ngDoCheck 被调用了 4 次。

  • 前两次调用似乎在任何应用程序的引导过程中都是正常的(尽管没有记录)。
  • 第3次和第4次调用是 HTTP 请求触发的结果。有一个由 readystatechange 事件触发的变更检测,另一个是由 load 触发的(也请参阅下面的截图中的调用树)。在这种情况下,只应触发一次变更检测。从变更检测的Angular 来看,其中一个是冗余的,并降低了应用程序的性能。

🌍 您的环境

Angular 版本:

Angular CLI: 6.2.8
Node: 8.11.3
OS: darwin x64
Angular: 6.1.10
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.8.8
@angular-devkit/build-angular     0.8.8
@angular-devkit/build-optimizer   0.8.8
@angular-devkit/build-webpack     0.8.8
@angular-devkit/core              0.8.8
@angular-devkit/schematics        0.8.8
@angular/cli                      6.2.8
@ngtools/webpack                  6.2.8
@schematics/angular               0.8.8
@schematics/update                0.8.8
rxjs                              6.2.2
typescript                        2.9.2
webpack                           4.16.4
3b6akqbq

3b6akqbq2#

就我所知,这似乎是zone.js处理XMLHttpRequest的一种方式,通过添加onreadystatechange监听器(HttpXhrBackend不使用该事件)。也许@JiaLiPassion对此比我更了解。

lmyy7pcs

lmyy7pcs3#

我会检查这个问题,感谢提出问题。

相关问题