fix(core): make sure onStable runs in the right zone (#18706)
Make sure the callbacks to the NgZone callbacks run in the right zone
with or without the rxjs Zone patch -
1ed83d08ac
.
PR Close #18706
This commit is contained in:

committed by
Miško Hevery

parent
079d884b6c
commit
713d7c2360
@ -455,17 +455,22 @@ export class ApplicationRef_ extends ApplicationRef {
|
||||
});
|
||||
|
||||
const isStable = new Observable<boolean>((observer: Observer<boolean>) => {
|
||||
const stableSub: Subscription = this._zone.onStable.subscribe(() => {
|
||||
NgZone.assertNotInAngularZone();
|
||||
// Create the subscription to onStable outside the Angular Zone so that
|
||||
// the callback is run outside the Angular Zone.
|
||||
let stableSub: Subscription;
|
||||
this._zone.runOutsideAngular(() => {
|
||||
stableSub = this._zone.onStable.subscribe(() => {
|
||||
NgZone.assertNotInAngularZone();
|
||||
|
||||
// Check whether there are no pending macro/micro tasks in the next tick
|
||||
// to allow for NgZone to update the state.
|
||||
scheduleMicroTask(() => {
|
||||
if (!this._stable && !this._zone.hasPendingMacrotasks &&
|
||||
!this._zone.hasPendingMicrotasks) {
|
||||
this._stable = true;
|
||||
observer.next(true);
|
||||
}
|
||||
// Check whether there are no pending macro/micro tasks in the next tick
|
||||
// to allow for NgZone to update the state.
|
||||
scheduleMicroTask(() => {
|
||||
if (!this._stable && !this._zone.hasPendingMacrotasks &&
|
||||
!this._zone.hasPendingMicrotasks) {
|
||||
this._stable = true;
|
||||
observer.next(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user