问题描述
我有user.service.ts,其中有使用http请求的方法并返回了Observable。
getUser(userId): Observable<IUser> {
return this._httpClient.get(_apiParameters.url + '/users/' + userId,httpOptions)
.pipe(map((res: IUser) => {
return res;
})
);
}
在我的user.conponent.ts中,我有方法method1(),method2(),method3(),其中我订阅了userService.getUser(userId)
method1() {
this.userService.getUser(userId).subscribe(res => {
this.user = res;
})
}
method2() {
this.userService.getUser(userId).subscribe(res => {
this.user = res;
})
showCredit();
}
method3() {
this.userService.getUser(userId).subscribe(res => {
this.user = res;
addCredit(this.user.id);
})
}
但是在订阅的method3()中,我有this.user = res;和addCredit(this.user.id); 我尝试过
initializeUser() {
this.userService.getUser(userId).subscribe(res => {
this.user = res;
})
}
然后在所有其他方法中调用initializeUser(),但是在那种情况下,我丢失了addCredit(this.user.id);而且我需要响应中的那个“ id”。
我该如何编写代码,这样我就不会在每个方法中都重复该订阅并等待订阅,因此我可以在method3();中调用addCredit(this.user.id);
解决方法
怎么样
initializeUser(shouldAddCredit: boolean) {
this.userService.getUser(userId).subscribe(res => {
this.user = res;
if (shouldAddCredit) {
addCredit(this.user.id);
}
})
}
method1() {
this.initializeUser(false);
}
method2() {
this.initializeUser(false);
showCredit();
}
method3() {
this.initializeUser(true);
}