gpt4 book ai didi

angular - 替换 rxjs6 中的 share() 函数

转载 作者:行者123 更新时间:2023-12-02 09:12:11 24 4
gpt4 key购买 nike

我正在尝试让已登录用户的详细信息可供我的应用程序使用。我有以下代码在 Angular 5 中工作,但在 Angular 6 中不起作用,因为 .share() 函数在 rxjs 6 中丢失

我需要 .share() 函数吗?关于 rxjs 6 的更改,我的代码看起来正常吗?

export class UserService {

readonly baseUrl = `${environment.apiUrl}/auth`;

private loggedIn = false;

private currentUserSubject = new BehaviorSubject<LoggedInUser>({} as LoggedInUser);
currentUser = this.currentUserSubject.asObservable().share();


constructor(private http: HttpClient) { }

login(userLogin: UserLogin) {
return this.http.post<any>(this.baseUrl + '/login', { username: userLogin.email, password: userLogin.password })
.subscribe(result => {
localStorage.setItem('auth_token', result.auth_token);
this.setCurrentUser();
return true;
});
}

setCurrentUser(): void {
if (localStorage.getItem("auth_token")) {
let jwtData = localStorage.getItem("auth_token").split('.')[1]
let decodedJwtJsonData = window.atob(jwtData)
let decodedJwtData = JSON.parse(decodedJwtJsonData)
this.currentUserSubject.next(
{
firstName: decodedJwtData.given_name,
id: decodedJwtData.id,

}
);
}
}

getCurrentUser(): LoggedInUser {
if (this.currentUserSubject.value.id) {
return this.currentUserSubject.value;
}
}

ngOnDestroy() {
this.currentUserSubject.unsubscribe();
}

isLoggedIn() {
this.setCurrentUser();
if (this.currentUserSubject.value.id) {
return true;
}
return false;
}

}

最佳答案

RxJS v5.5.2+已移至Pipeable operators 以改进 tree shaking 并使其更容易创建自定义 operators。 现在operators需要使用 pipe 组合方法
Refer This
新导入

import { share} from 'rxjs/operators';

修改后的代码

   currentUser = this.currentUserSubject.asObservable().pipe(share());

RxJS 6 - What Changed? What's New?

Do I need the .share() function?

取决于您的用例,如果您不使用多个异步 pipe你不需要share运算符
Subject充当源 Observable 之间的桥梁/代理和许多observers , 使得多个 observers 成为可能分享相同的Observable执行。

异步管道不使用共享,也不对模板中的多次重复使用进行任何优化。它为模板中异步管道的每次使用创建一个订阅。

引用: RxJS: Understanding the publish and share Operators

关于angular - 替换 rxjs6 中的 share() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50885262/

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