我正在使用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)))
);
我想要做的是在请求成功时链接两个额外的操作。
this.router.navigate(['/'])
后的页面。this.authService.store(credentials)
我需要做些什么才能将这些操作合并到流中?
答案 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}
表示“对此操作做出反应但不发送其他操作”。