angular - 纯 rxjs if/else 语句未通过合并到达 else 语句
问题描述
我尝试用用户状态登录在纯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)
)
谢谢你的帮助。
解决方案
我遇到了同样的问题行为。我观察到当合并我的流(这里isSignedId$
和isNotSignedIn$
)时,合并中的第二个流输入(这里isNotSignedIn$
)不会开始流动。
删除share()
源 Observable(此处signedIn$
)上的运算符后,此行为发生了变化,合并的两个流都会流动,我的问题就解决了。
推荐阅读
- hybris - SmartEdit:除非刷新页面,否则嵌套 CMS 组件中的更改不会反映
- c++ - 类模板实例化C++的编译错误
- git - 如何修复 ReferenceError: primordials 未在节点中定义?
- python - 使用 dictwriter 将有限的列数写入 CSV,并像在 Excel 中一样创建计算列
- math - O(N+N) 与 Big O 表示法中的 O(2N) 相同吗?
- windows - LNK2019 定义 UNICODE/_UNICODE 时
- ansible - Ansible if else 在迭代字典时
- python - pandastable 脱离框架
- reactjs - 即使道具没有改变,反应子组件也会重新渲染
- mysql - Sandbox 下的 NSOpenPanel - 访问用户选定文件夹中的套接字