在Angular 7中同步使两个HTTP请求同步



我是Angular/rxjs等的新手。我想依次提出两个HTTP请求。我假设如果我在第一个可观察的完整函数中调用下一个方法,则应该顺序运行,但事实并非如此。

login(): boolean {
let windowsAuthToken: string;
var result = this.http.get(this.authUrl).subscribe(
  (response: any) => {
    windowsAuthToken = response.token;
  },
  err => {},
  () => {
    return this.performWindowsAuthentication(windowsAuthToken);
  }
);
return false;
}
performWindowsAuthentication(windowsAuthToken: string): boolean {
if (!!windowsAuthToken) {
  const loginRequest = new WindowsLoginRequest(windowsAuthToken);
  this.http
    .post<WindowsLoginRequest>(this.winLoginUrl, loginRequest)
    .subscribe(
      (response: any) => {
        if (response) {
          localStorage.setItem(Constants.jwtToken, response.jwt);
        }
      },
      err => this.logger.logError("Failed to get JWT token", err),
      () => {
        return true;
      }
    );
  } else {
      return false;
  }
}

您可以使用SwitchMap

创建一个可观察的一个
this.http.get(this.authUrl).pipe(
  map(response => response.token),
  switchMap(token => this.http.post<WindowsLoginRequest>(this.winLoginUrl, new WindowsLoginRequest(token)))
)

最新更新