Angular 6-未触发链式API调用

时间:2018-08-01 15:19:26

标签: angular api typescript

我正在尝试创建一个身份验证系统,它分为两个部分。

首先,我需要使用用户名和密码进行呼叫,如果有效,它将返回一个代码。

此代码用于检查它是否有效,以及是否已验证用户i。

此调用应获取代码:

  requestAuthCode(request: models.AuthenticationRequest): Observable<any> {
    return this.httpClient
      .get<any>(environment.auth.authorize, {
        headers: headers,
        params: params
      })
      .pipe(
        tap(val => this.authenticate(val.code)),
        catchError(error => this.handleError(error))
      );
  }

此调用检查代码是否有效并验证用户身份

  authenticate(code: string): Observable<any> {
    return this.httpClient
      .post<models.AuthenticationTokenResponse>(
        environment.auth.token,
        null,
        {
          headers: headers,
          params: params
        }
      )
      .pipe(
        tap(data => this.setSession(data)),
        catchError(error => this.handleError(error))
      );
  }

目标

如果requestAuthCode的响应中包含代码,我希望它启动authenticate调用,否则它必须返回错误。

但是我何时使用

this.authService.requestAuthCode(request)
        .subscribe(
          data =>  {
            console.log(data);
          }

我只是从requestAuthCode而不是从链接的authenticate调用中获取响应数据。我还可以看到authenticate没有被触发。

如何实现requestAuthCode触发authenticate并将数据返回给我的组件?

1 个答案:

答案 0 :(得分:1)

  tap(val => this.authenticate(val.code)),

尝试

 switchMap(val => this.authenticate(val.code)),