链中中间带有确认对话框的复角ngrx效果

问题描述 投票:0回答:1

因此,我有一个简单的从策略中注销客户端的过程。

我的注销操作应:

  1. 基于从列表中选择的客户端,根据客户端的ID获取所有客户端数据

  2. 从点1获取数据后,显示包含所有这些数据的确认对话框

  3. 在对话框中,您可以添加/删除一些以前选择的客户端

  4. 确认对话框后发送修改的客户列表以注销过程

我的动作开始于:

export class DeregisterClients implements Action {
  readonly type = ActionTypes.DEREGISTER_CLIENTS;

  constructor(public policyNumber: string, public ids: number[]) {
  }
}

所以问题是效果如何?下面只有伪代码和map运算符在各处使用,因为我不知道应该使用哪个运算符

  @Effect({dispatch: false})
  deregister$ = this.actions$.pipe(
    ofType<DeregisterClients>(DEREGISTER_CLIENTS),
    // 1 fetch all data
    map(event => {
      return event.ids.map((id) => {
        return this.api.fetchClient(event.policyNumber, id);
      });
    }),
    // 2 collect all data from point 1 and show this data in dialog
    map((insureds) => {
      return this.dialogService.open(DeregisterDialog, data: {policyNumber: 'TODO', clients}}) //here i lost policy number :(
        .afterClosed();
    }),
    // 3 check result after dialog closed
    map((result: DeregisterDialogResult) => {
      if (!result.success) {
        return [];
      }
      return result.clients.map(client => this.api.deregister("TODO", client));//here i lost policy number :(
    }),
    //4 concurrently deregister them
    //todo
  );

也许这太复杂了?但是从业务角度来看,这是一个动作。

angular rxjs angular-material ngrx ngrx-effects
1个回答
0
投票
您可以创建一个效果,也可以将效果链分成多个相互反应的较小效果。例如,一个效果将分派动作“ Step 1 Completed”,第二个效果将监听此动作并对它做出反应。
© www.soinside.com 2019 - 2024. All rights reserved.