Angular 等待承诺导致以下等待在NGZ区域之外
角度6,cli 6 我最近遇到了一些问题,订阅中没有发生更改检测-如果我执行Angular 等待承诺导致以下等待在NGZ区域之外,angular,Angular,角度6,cli 6 我最近遇到了一些问题,订阅中没有发生更改检测-如果我执行detectChanges(),那么一切都很顺利 这让我发现http调用正在区域外运行,这令人不安 经过一番搜寻,我把范围缩小到这个代码 我有一个基本的http服务,它使用httpClient发出请求,并为每个“api”进行扩展 现在在我的组件中 const[yy,xx]=等待承诺([ 此._labelApi.find().toPromise(), 这是._workspaceApi.find().toPromise()
detectChanges()
,那么一切都很顺利
这让我发现http调用正在区域外运行,这令人不安
经过一番搜寻,我把范围缩小到这个代码
我有一个基本的http服务,它使用httpClient发出请求,并为每个“api”进行扩展
现在在我的组件中
const[yy,xx]=等待承诺([
此._labelApi.find().toPromise(),
这是._workspaceApi.find().toPromise()
]);
const z=等待此操作。_labelApi.find().toPromise()
其中\u labelApi
和\u workspaceApi
是扩展基本服务的类
忽略代码,真正有趣的是控制台消息
xxxx /api/Labels true
xxxx /api/Workspaces true
xxxx /api/Labels false
因此,当执行对/api/Labels
的第二次相同调用时,这次它不在区域中
如果我将代码更改为
const a = await this._labelApi.find().toPromise();
const z = await this._labelApi.find().toPromise();
const b = await this._workspaceApi.find().toPromise();
然后控制台结果是
xxxx /api/Labels true
xxxx /api/Labels false
xxxx /api/Workspaces false
因此,在我看来,第一个http调用似乎会将任何其他http抛出该区域。这是非常非常奇怪的
有人知道这里会发生什么吗
谢谢
更新#1
我很确定这与toPromise()
有关。如果我把代码改为
this._labelApi.find().subscribe();
this._labelApi.find().subscribe();
this._workspaceApi.find().subscribe();
然后控制台显示
xxxx /api/Labels true
xxxx /api/Labels true
xxxx /api/Workspaces true
但是,当然,这使得在启动另一个http请求之前等待http请求变得更加棘手
更新#2
如果我将tsconfig
中的目标从esnext
更改为es5
,则代码会按照我的预期工作
所以,如果我冒昧猜测一下,typescript->exnext transpiler有点不对劲
xxxx /api/Labels true
xxxx /api/Labels true
xxxx /api/Workspaces true