您仍然可以在Chrome DevTools中收到警告
[Violation] 'setTimeout' handler took 103ms zone.js:1894
即使你在ngzone之外运行所有超时?我是这样做的:
this.zone.runOutsideAngular(() => {
this._timeout = setTimeout(() => {
// ...
});
});
并清除现有的超时onDestroy(Angular)
答案 0 :(得分:2)
setTimeout
在Angular之外运行的事实并不意味着它在区域之外运行。
如the reference所述,
在Angular的父区域中同步执行fn函数,并返回函数返回的值。
通过runOutsideAngular运行函数允许您转义Angular的区域并执行不会触发Angular更改检测的工作或受Angular错误处理的影响。
因此预计setTimeout
仍在区域内运行。