【问题标题】:Angular - write one subscribe method which in "next()" function have different codeAngular - 编写一个订阅方法,该方法在“next()”函数中具有不同的代码
【发布时间】:2020-12-10 23:34:45
【问题描述】:

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

【问题讨论】:

  • 您可以简单地向函数添加一个参数,并根据该参数有条件地调用 addCredit。

标签: angular async-await observable subscribe


【解决方案1】:

怎么样

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

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 2018-05-13
    • 2018-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多