首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ngrx/effect (redux-observable)中分派多个动作?

如何在ngrx/effect (redux-observable)中分派多个动作?
EN

Stack Overflow用户
提问于 2018-06-01 00:58:54
回答 2查看 19.7K关注 0票数 12

我使用的是Angular 6,ngrx/store。我有这样的效果,负责更新东西。根据一些逻辑,我想分派不同的动作。如果我使用switchMap安装map ?

这就是我尝试过的,但它不起作用:

代码语言:javascript
复制
@Effect()
  dispathMultipleActions$ = this.actions$.pipe(
    ofType(ActionTypes.UpdateSomething),
    map(() => {
      const actions: Action[] = [];
      const array = [1, 2, 3, 4, 5];
      array.forEach(item => {
        if (item > 3) {
          actions.push(new DeleteAction(item));
        } else {
          actions.push(new ChangeAction(item));
        }
      });
      return actions;
    })
  );
EN

Stack Overflow用户

回答已采纳

发布于 2018-06-01 03:16:44

效果转换动作流,因此您有一个动作流作为输入和输出。在您的示例中,您将操作映射到操作数组。操作数组流不是有效的输出类型。您需要扁平化该数组,这意味着您不会将数组本身发送到输出流中,而是将其每个元素发送到输出流中。

而不是:

代码语言:javascript
复制
input:  --a-------a------>
output: --[b,c]---[b,c]-->

您应该执行以下操作:

代码语言:javascript
复制
input:  --a-------a------>
output: --b-c-----b-c-->

要将数组的可观测值展平为每个元素的可观测值,可以使用以下运算符之一

mergeMap, switchMap, exhaustMap。在大多数情况下,

mergeMap将是正确的选择。如果您想了解有关这些运算符的更多信息,请查看以下内容answer.

代码语言:javascript
复制
@Effect()
register$: Observable = this.actions$.pipe(
  ofType(AuthActionTypes.REGISTER_REQUEST),
  mergeMap((action: RegisterRequest) => {
    // check for register request success
    return [
      new RegisterSuccess(),
      new LoginRequest(action.payload)
    ]
  })
);
票数 36
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50629328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档