首页 > 解决方案 > 在 Effect 中执行另一个动作后调度一个动作

问题描述

我的代码中有以下功能

    private loadDrones() {
    this.store$.dispatch(new UsedDronesStoreActions.GetUsedDronesRequest({organizations_id : environment.organizationId}));
    this.store$.pipe(select(UsedDronesStoreSelectors.selectAll)).subscribe((drones) => {
      drones.forEach((drone) => {
        if (this.drones.has(drone.id)) { return; }
        this.drones.set(drone.id, drone);
        this.store$.dispatch(new UsedDronesStoreActions.OpenUsedDroneUpdatePositionChannelRequest({ droneId: drone.id, projectId : environment.projectId }));
        this.store$.dispatch(new UsedDronesStoreActions.OpenUsedDroneUpdateStatusChannelRequest({ droneId: drone.id, projectId : environment.projectId }));
      });
    });
  }

我想将此功能移动到我的效果中的 INIT 操作中。

使用

  @Effect()
  init$ = this.actions$.pipe(
    ofType(ROOT_EFFECTS_INIT),
    map(action => ...)
  );

我的问题是,实际函数加载一个列表,然后感谢该列表的结果,为列表的每个元素调度一系列动作。

是否有可能在单一效果中实现这一点?还是我必须将其分成 2 个不同的动作?

标签: reduxngrx

解决方案


https://medium.com/@amcdnl/dispatching-multiple-actions-from-ngrx-effects-c1447ceb6b22

@Effect() save = this.update$.pipe(
   map(action => action.payload),
   switchMap(payload => this.myService.save(payload)),
   switchMap(res => [
       new Notification('save success'),
       new SaveSuccess(res)
   ])
);

推荐阅读