我尝试用纯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)
)
感谢您的帮助。
答案 0 :(得分:0)
我遇到了同样的问题行为。我观察到,合并流(此处为isSignedId$
和isNotSignedIn$
)时,合并(此处为isNotSignedIn$
)中的第二个流输入将不会开始流动。
在移除源Observable(此处为share()
)上的signedIn$
运算符后,此行为发生了变化,两个流合并将流动并且我的问题得到解决。