rxjs with angular 2 - 如何链接可观察流

时间:2016-08-18 22:52:58

标签: angular rxjs

我正在使用angular2和@ngrx / store创建一个应用程序...我是rxjs的新手,并且以一种被动的方式思考......真的在努力研究可观察量如何被链接。

我有一个身份验证效果......目前看起来像是

@Effect() authenticate$ = this.updates$
.whenAction(AuthActions.AUTHENTICATE_REQUEST)
.switchMap(update => this.api.post('/authenticate', update.action.payload)
  .map((res:any) => this.authActions.authenticateSuccess(res.json()))
  .catch((err:any) => Observable.of(this.authActions.authenticateError(err)))
);

我想要做的是在请求成功时链接两个额外的操作。

  1. 导航到" home"成功使用this.router.navigate(['/'])后的页面。
  2. 将凭据存储在LocalStorage服务this.authService.store(credentials)
  3. 我需要做些什么才能将这些操作合并到流中?

2 个答案:

答案 0 :(得分:1)

假设最后2个语句的执行顺序无关紧要,那么您需要做的就是在当前语句的末尾追加

.flatMap(() =>
{
   this.router.navigate(['/']);
   this.authService.store(credentials);
});

答案 1 :(得分:0)

最佳解决方案是保持您的effect像这样,并添加另一个以对此成功行动作出反应:

@Effect({dispatch: false}) authenticateSuccess$ = this.updates$
.whenAction(AuthActions.AUTHENTICATE_SUCCESS)
.do(credentials => {
    this.router.navigate(['/']);
    this.authService.store(credentials);
});

{dispatch: false}表示“对此操作做出反应但不发送其他操作”。