gpt4 book ai didi

angular - 纯 rxjs if/else 语句未通过合并到达 else 语句

转载 作者:行者123 更新时间:2023-12-04 17:42:56 27 4
gpt4 key购买 nike

我尝试在纯 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$)不会开始流动。

删除源 Observable 上的 share() 运算符(这里是 signedIn$)后,这种行为发生了变化,合并的两个流都会流动,我的问题就解决了。

关于angular - 纯 rxjs if/else 语句未通过合并到达 else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com