按顺序分派乘法操作-ngrx

Fra*_*pin 1 ngrx ngrx-effects angular

我想知道如何按顺序分配乘法操作。

  @Effect()
  getClients$: Observable<Action> = this.actions$
    .ofType(ClientActions.GET_CLIENTS)
    .withLatestFrom(this.store.select(fromRoot.getClients))
    .filter(([action, clients]) => clients.length === 0)
    .map(action => new LayoutActions.IsLoading(true))
    .switchMap(() => this.clientService.getClients())
    .map(clients => new ClientActions.GetClientsReceived(clients));
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,未调度第一个操作。getClients()方法和上一个操作均正常运行。

Ghe*_*lay 5

可观察对象发出的每个动作都将被分派,因此您需要将一个动作映射到多个动作。您可以通过在上添加加载操作来startWith()实现switchMap()

.switchMap(action => {
  this.clientService.getClients()
    .map(clients => new ClientActions.GetClientsReceived(clients) as Action)
    .startWith(new LayoutActions.IsLoading(true))
);
Run Code Online (Sandbox Code Playgroud)

有时输入可能会出错,打字稿会使用您的操作的特定类型而不是Action。在这种情况下,映射后将Observable键入,Observable<ClientActionReceived>因此LayoutActionLoading对于typescript 返回内部startWith似乎是错误的。
为了避免这种情况,你需要两个投一个为Action所以它会知道这是一个Observable<Action>