首页 > 解决方案 > 为什么不订阅 NgRx 效果中的可观察对象?

问题描述

在 Angular 中使用 observables 时,我的理解是 observable 除非被订阅,否则不会运行。然而,在查看 rxjs 效果时,我们通常会看到这样的代码:

getProcess$ = createEffect(() =>
    this.actions$.pipe(
      ofType(ProcessActions.getProcessIdSuccess),
      switchMap((action) =>
        this.processService.getProcess(action.payload).pipe(
          delay(5000),
          map((data: any) => ProcessActions.getProcessSuccess({ payload: data }))
        )
      )
    )
  );

代码中的任何地方都没有调用 subscribe() 方法,这让我有些困惑。内部 observable 中的代码如何在没有订阅的情况下运行?谢谢。

标签: angularrxjs

解决方案


NgRx 在后台负责处理订阅。这就是为什么我们不必弄清楚何时/如何订阅我们在库中使用的各种 Observable。

顺便说一句,只要有可能(通常是这样),请严格避免在您的 TS 中订阅 Observables。一般来说,您想async在某个地方的模板中使用管道。


推荐阅读