【问题标题】:Returning a nested observable返回一个嵌套的 observable
【发布时间】:2021-03-09 03:41:39
【问题描述】:

鉴于此方法:

public logIn(data:any): Observable<any> {
  this.http.get('https://api.myapp.com/csrf-cookie').subscribe(() => {
    return this.http.post('https://api.myapp.com/login', data);
  });
}

我希望它返回嵌套的 observable,以便我的调用代码可以像这样使用它:

this.apiService.logIn(credentials).subscribe(() => {
    // redirect user to their dashboard
});

无需知道第一个/csrf-cookie 请求。显然上述方法不起作用 - 但我很难理解如何让内部 HTTP 请求等待外部 HTTP 请求完成并由该方法返回。

【问题讨论】:

    标签: javascript angular typescript rxjs observable


    【解决方案1】:

    您应该使用switchMap,请参阅documentation on switch map

    public logIn(data:any): Observable<any> {
      return this.http.get('https://api.myapp.com/csrf-cookie').pipe(
        switchMap(x => this.http.post('https://api.myapp.com/login', data))
      );
    }
    

    使用 rxjs 嵌套订阅通常不是一个好主意。图书馆中有许多出色的运营商可以帮助您解决问题。在上述这种情况下,一个调用依赖于另一个 switchMap(...) 是最合适的。

    还修改了代码以返回observable 而不是subscription

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      相关资源
      最近更新 更多