NgRx-可选地从一个效果返回一个或两个动作

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

我起作用,根据数据返回的内容,我不妨提交额外的操作。

使用this post中的信息,我可以通过以下操作返回两个操作...

public getData$ = createEffect(() => this.actions$.pipe(
    ofType(myDataActions.getData),
    map(() => this.isPollingActive = true),
    mergeMap(() =>
      this.myService.getAllData()
        .pipe(
          tap(data => this.previousResultsTimeUtc = data.previousResultsTimeUtc),
          mergeMap(data => [
            currentDayActions.getCurrentShiftSuccess(data.currentDay),
            myDataActions.getDataSuccess(data)
          ]),
            catchError(err => of(myDataActions.getDataFail(err)))
          ))
    ));

但是,理想情况下,我有时只想提交一个动作,

例如

    ...
      mergeMap(data => [
            if (data.currentDay !== undefined) // <-- how to do this
              currentDayActions.getCurrentDaySuccess(data.currentDay),

            myDataActions.getDataSuccess(data.data)
          ]),

所以,如果我得到数据,我只想提交currentDayActions.getCurrentDaySuccess

当然,以上是不正确的语法,但我不太明白如何在此处获取此“ if”。

非常感谢任何帮助。

angular ngrx ngrx-effects
1个回答
0
投票

最简单的方法是将if-else语句嵌套在mergeMap运算符中

mergeMap(data => [
  if (data.currentDay) {
    return currentDayActions.getCurrentDaySuccess(data.currentDay);
  } else {
    return [
      currentDayActions.getCurrentDaySuccess(data.currentDay),
      myDataActions.getDataSuccess(data.data)
    ];
  }
]),
© www.soinside.com 2019 - 2024. All rights reserved.