链接RxJS地图运算符和ngrx效果问题

时间:2017-03-02 22:14:48

标签: rxjs rxjs5 ngrx ngrx-effects

我的应用使用ngrx和ngrx效果。这是我的应用效果之一:

  @Effect()
  reloadPersonalInfo$: Observable<Action> = this.actions$
    .ofType(currentUserAccount.ActionTypes.RELOAD_PERSONAL_INFO)
    .filter(() => <boolean>JSON.parse(localStorage.getItem('authenticated')))
    .switchMap(() =>
      this.userAccountService
        .retrieveCurrentUserAccount()
        .map(currentUserAccount => new LoadUserAccountAction(currentUserAccount))
        .map(() => new SigninAction())
    );

我想知道为什么LoadUserAccountAction没有输入我的reducer函数,除非我注释掉//.map(() => new SigninAction())

有人可以帮忙吗?我错了什么?

1 个答案:

答案 0 :(得分:2)

您的LoadUserAccountAction未被发送,因为效果未发出,因为最终的.map(() => new SigninAction())会看到发出的SigninAction

可以从效果中发出多个动作,您只需要这样做:

@Effect()
reloadPersonalInfo$: Observable<Action> = this.actions$
  .ofType(currentUserAccount.ActionTypes.RELOAD_PERSONAL_INFO)
  .filter(() => <boolean>JSON.parse(localStorage.getItem('authenticated')))
  .switchMap(() => this.userAccountService
    .retrieveCurrentUserAccount()
    .concatMap(currentUserAccount => [
      new LoadUserAccountAction(currentUserAccount),
      new SigninAction()
    ])
  );

concatMap运算符将展平包含两个动作的数组,以便发出这两个动作 - 按照它们在数组中声明的顺序。