【发布时间】:2018-12-05 14:00:53
【问题描述】:
我尝试在纯rxjs中写一个if/else语句,用户状态登录。在用户未登录的情况下,我只保留登录后重定向的url。
我面临的问题是用户未连接时没有存储url。
ngOnInit() {
this.initContactUsForm();
const signedIn$ = this.authQuery.select(state => state.signedIn).pipe(share());
const isSignedIn$ = signedIn$.pipe(
filter((signedIn: boolean) => signedIn),
switchMap((signedIn: boolean) => {
this.isSignedIn = signedIn;
this.userId = this.authQuery.getSnapshot().sub;
return this.authService.currentAuthenticatedUser());
})
);
const isNotSignedIn$ = signedIn$.pipe(
filter((signedIn: boolean) => !signedIn),
switchMap((signedIn: boolean) => {
this.isSignedIn = signedIn;
this.authService.storeAttemptedUrl(this.router.url);
return empty();
})
)
merge(isSignedIn$, isNotSignedIn$).subscribe(
(user: any) => this.setContactUsFormSenderUserValues(user),
(error: any) => console.log(error)
)
}
我是否缺少获取网址的内容?我做错了什么?
编辑: 起初,我有这个正在工作。但我希望它采用纯可观察的风格。
signedIn$.pipe(
switchMap((signedIn: boolean) => {
if (signedIn) {
this.isSignedIn = signedIn;
this.userId = this.authQuery.getSnapshot().sub;
return this.authService.currentAuthenticatedUser();
} else {
this.isSignedIn = signedIn;
const url = this.router.url;
this.authService.storeAttemptedUrl(url);
return empty();
}
}),
).subscribe(
(user: any) => this.setContactUsFormSenderUserValues(user),
(error: any) => console.log(error)
)
感谢您的帮助。
【问题讨论】:
-
我认为
if在switchMap中的条件版本没有任何问题。无论如何,您的函数都不是纯函数,因此尝试以纯可观察的样式编写它正在向上游发展。