当我派发倍数时,我的效果仅被调用一次

时间:2019-05-30 12:30:48

标签: angular observable ngrx ngrx-effects

加载一组无人机时,我调度了很多事件。我想为每个加载的无人机分派连接到SSE服务,因此我需要执行以下操作

      drones.forEach((drone) => {
        console.log('dispatch', drone.id)
        this.store$.dispatch(new UsedDronesStoreActions.OpenUsedDroneUpdatePositionChannelRequest({ droneId: drone.id, projectId : environment.projectId }));
      });

我的效果

  @Effect()
  startStatusUpdate$ = this.actions$.pipe(
    ofType<featureActions.OpenUsedDroneUpdateStatusChannelRequest>(featureActions.ActionTypes.OpenUsedDroneUpdateStatusChannelRequest),
    concatMap((action) =>
      this.droneDataService.openUsedDroneUpdateStatusChannel(action.payload).pipe(
        map(result => { console.log('there', action.payload.droneId);}),
        catchError((error: HttpErrorResponse) => { }),
      )
    )
  );

仅被调用一次

dispatch id1
dispatch id2
dispatch id3

there id1
===> no more

我尝试了concatMap,而switchMap摊位不做(concat仅显示第一个值,切换最后一个)

switchMap仅执行他从先前退订的最后一个原因 concatMap将不会订阅另一个,因为第一个尚未完成...

有没有一个订阅所有人并分别观看他们的人?

1 个答案:

答案 0 :(得分:0)

在控制台中没有出现任何错误吗?效果应该始终返回Action(除非正在使用dispatch: false)。

  map(result => { console.log('there', action.payload.droneId);}),

不返回动作并导致效果被破坏。