Angular 2 - 当 Http 请求依赖于另一个 Http 请求的结果时该怎么办

cbi*_*man 4 rxjs angular

我无法弄清楚如何使用 Http 请求的结果来发出另一个 Http 请求。

我有一个从后端 API 请求和接收 JSON Web 令牌的服务,如下所示:

@Injectable()
export class JwtAuthorizationService {

  constructor(private http: Http) {}

  public requestToken(): Observable<string> {
    // Set dummy credentials.
    let body = this.setBody();
    let headers = this.setHeaders();
    let token = this.http.post(tokenUrl, body, { headers: headers })
      .map(this.extractData)
      .catch(this.handleError);

    // Return the Observable
    return token;
  }

  private extractData(res: Response): string {
    let body = res.text();
    return body || "";
  }
Run Code Online (Sandbox Code Playgroud)

我现在如何使用requestToken()(Observable)的结果进行另一个 API 调用,通过 JWT 进行身份验证,并从中获取结果?或者更简单地说,当一个 Http 调用依赖于另一个调用的结果时,你会怎么做?

Thi*_*ier 5

您可以使用flatMap运算符来做到这一点:

this.authorizationService.requestToken().flatMap(token => {
  var headers = new Headers();
  headers.append('Authorization', `Bearer ${token}`);
  return this.http.get('...', { headers }).map(res => res.json());
});
Run Code Online (Sandbox Code Playgroud)

您还可以做的是通过扩展 HTTP 类使其透明。在其中,您可以检查令牌有效性,如果它已过期,则调用该requestToken方法。

有关更多详细信息,请参阅此问题: