NGRX-每次效果后运行功能

Clo*_*e24 4 rxjs typescript ngrx ngrx-effects angular

NGRX效果是否可以具有某种“回调功能”或监视程序?用例是,我试图在浏览器刷新期间保持状态。在每种效果运行之后,我想调用我的缓存服务以保存应用状态。目前,我正在通过将其添加到每个效果中来做到这一点:

tap(() => setTimeout(() => this.cacheService.saveAppState()))
Run Code Online (Sandbox Code Playgroud)

感觉应该有更好的方法来实现这一目标?

Jot*_*edo 5

是的,有更好的方法。您可以OnRunEffects在效果类上实现。例如:

@Injectable()
export class OrderStoreEffects implements OnRunEffects {
  // Resolves to either QueryCompleted or QueryFailed
  @Effect()
  queryOrdersFromProduct$: Observable<Action> = this.actions$.pipe(...);

  // Resolves to either QueryCompleted or QueryFailed
  @Effect()
  queryOrdersFromWorkCenter$: Observable<Action> = this.actions$.pipe(...);

  constructor(...) {}

  ngrxOnRunEffects(resolvedEffects$: Observable<EffectNotification>) {
    return resolvedEffects$.pipe(tap(effect => console.log({ effect })));
  }
}
Run Code Online (Sandbox Code Playgroud)

每当执行并解决该类中的一个效果,该resolvedEffects$observable就会发出。OrderStoreEffects

发出的值如下所示:

在此处输入图片说明

这为您提供了应用过滤器或其他逻辑的其他可能性。

有关该OnRunEffects界面的更多信息,请检查文档