首页 > 解决方案 > 在Angular 7中同步发出两个Http请求

问题描述

我是 Angular/RxJS 等的新手。我想按顺序发出两个 HTTP 请求。我假设如果我在第一个 observable 的完整函数中调用 next 方法,它应该按顺序运行,但事实并非如此。

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

标签: rxjsangular7angular2-observables

解决方案


你可以使用 switchMap 创建一个 observable

this.http.get(this.authUrl).pipe(
  map(response => response.token),
  switchMap(token => this.http.post<WindowsLoginRequest>(this.winLoginUrl, new WindowsLoginRequest(token)))
)

推荐阅读