在Redux可观察到的史诗中的所有动作之后触发一个动作

阿米尔·莫瓦赫迪​​(Amir Movahedi)

我想在所有动作发生后触发一个动作。这是我的代码:

 public fetchCategories(action$: Observable<ICategoryAction>, store: Store<IAppState>) {
    return action$.pipe(
      ofType(CategoryActionType.FETCH_CATEGORIES),
      switchMap((action) => {
         return this._categoryService.list(action.payload)
      }),
      flatMap(data => [
        this._categoryAction.addCategories(new Categories(data)),
      ])
    ).catch((error) => {
      return Observable.of(this._commonAction.showError(error));
    })
    .concat(Observable.of(this._commonAction.hideLoading())); // <<== Doesn't work   
   }

我想在捕获成功或错误后隐藏加载。但这不是concat最后的动作。直到以后我才能看到一切顺利addCategories()

但是它不会调用concat

马丁

您无法执行的操作是因为concat仅在源Observable完成后才订阅其内部Observable。action$实际上,它是一个永远不会完成的主题(这意味着它不能再发出任何动作)。同样的情况是与catch你有。

这在很大程度上取决于操作的结构,但是您可以执行以下操作:

action$.pipe(
  ofType(CategoryActionType.FETCH_CATEGORIES),
    switchMap((action) => this._categoryService.list(action.payload)
      .pipe(
        catchError(() => of(this._commonAction.showError(error)))
      ),
    }),
    mergeMap(data => [
      this._categoryAction.addCategories(new Categories(data)),
      of(this._commonAction.hideLoading()),
    ])

我实际上在猜测您的代码应该做什么,因为我不知道.addCategories返回什么mergeMap在一个数组上只会使它变平(可能只想这样做)(但是对于一个数组项,您可以只使用map)?

顺便说一句,请注意您正在混合pipable和原型运算符:https : //github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Redux可观察到的史诗链调度重复动作

可观察到的Redux:为多个动作触发相同的史诗

在Redux可观察的史诗中发送请求之前触发动作

如何在可观看Redux的史诗中链接可观察到的RxJS?

可观察到的Redux-如何发送动作以启动单独的史诗,然后等待该史诗响应(或超时)

如何在单个Redux可观察的史诗中等待/屈服于多个动作?

Redux可观察史诗中的IF

链式可观察到的Redux史诗只能正确触发一次

如何在史诗中使用“ const”?Redux可观察到的ES6箭头功能

我们应该为每个动作类型创建一个Epic吗?在可观察到的

第一次调度后可观察到的redux多个动作

从Redux可观察的史诗中访问状态

如何在同一个史诗中调度多个动作

创建一个可观察到的所有值

退订可观察到的一个标签会禁用所有标签吗?

使用RxJS如何触发另一个动作流的可观察对象

在`toArray`之前发出动作-Redux可观察到

redux-observable-在单个史诗中调度多个redux动作

如何在 redux observable 史诗中为 ajax 响应发出两个动作

Redux-Observable 单个史诗中的多个动作

如何使用redux-observable在一部史诗中发出多个动作?

RxJava可观察到的最后一个状态

在可观察到的redux中,我如何在执行任何其他操作之前触发一个操作

RxJs可观察到而没有下一个事件?

使用Redux可观察的史诗通过多个动作来装饰数据

如何轻松测试5分钟后发出动作的redux可观察的史诗?

如何使用Redux可观察的史诗来测量两次动作之间的持续时间?

在Redux可观察到的场景中对多个史诗进行编排和排序

Mobx不允许在动作外部更改观察到的可观察值