首页 > 解决方案 > 当我分派多个时,我的效果只被调用一次

问题描述

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

switchMap 只做最后一个原因,他取消订阅前一个 concatMap 不会订阅另一个原因,因为第一个没有完成......

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

标签: angularobservablengrxngrx-effects

解决方案


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

线

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

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


推荐阅读