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()方法和上一个操作均正常运行。
可观察对象发出的每个动作都将被分派,因此您需要将一个动作映射到多个动作。您可以通过在上添加加载操作来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>。
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |