【问题标题】:My Effect is called only once when I dispatch multiples当我分派多个时,我的效果只被调用一次
【发布时间】:2019-05-30 12:30:47
【问题描述】:

当我加载一组无人机时,我调度了很多事件。我想为每架装载的无人机发送连接到 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 展位don7t 做(concat 只显示第一个值,切换最后一个)

switchMap 只做最后一个原因,他退订了上一个 concatMap 不会订阅另一个,因为第一个未完成...

有没有一个订阅大家,一个一个单独看的?

【问题讨论】:

标签: angular observable ngrx ngrx-effects


【解决方案1】:

您在控制台中没有收到任何错误吗?一个 Effect 应该总是返回一个 Action(除非正在使用 dispatch: false)。

线

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

不返回动作并导致效果被销毁。

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多