角度-在“ next”函数中编写一种具有不同代码的订阅方法

问题描述

我有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);
}