diff --git a/packages/store/src/dispatcher.ts b/packages/store/src/dispatcher.ts index 7695aa3ab..c22c81835 100644 --- a/packages/store/src/dispatcher.ts +++ b/packages/store/src/dispatcher.ts @@ -1,4 +1,4 @@ -import { Injectable, ErrorHandler } from '@angular/core'; +import { Injectable, ErrorHandler, NgZone } from '@angular/core'; import { Observable, of, forkJoin, empty, Subject, throwError } from 'rxjs'; import { shareReplay, filter, exhaustMap, take } from 'rxjs/operators'; @@ -23,19 +23,21 @@ export class InternalDispatcher { private _actions: InternalActions, private _actionResults: InternalDispatchedActionResults, private _pluginManager: PluginManager, - private _stateStream: StateStream + private _stateStream: StateStream, + private _ngZone: NgZone ) {} /** * Dispatches event(s). */ dispatch(event: any | any[]): Observable { - let result: Observable; - if (Array.isArray(event)) { - result = forkJoin(event.map(a => this.dispatchSingle(a))); - } else { - result = this.dispatchSingle(event); - } + const result: Observable = this._ngZone.runOutsideAngular(() => { + if (Array.isArray(event)) { + return forkJoin(event.map(a => this.dispatchSingle(a))); + } else { + return this.dispatchSingle(event); + } + }); result.subscribe({ error: error => this._errorHandler.handleError(error)