返回嵌套的可观察对象

Returning a nested observable

鉴于此方法:

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

我希望它 return 嵌套的可观察对象,以便我的调用代码可以像这样使用它:

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

无需了解第一个 /csrf-cookie 请求。显然上面的方法不起作用 - 但我正在努力了解如何使内部 HTTP 请求等待外部 HTTP 请求完成并通过该方法 returned。

你应该使用 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(...) 是最合适的。

代码也被修改为 return observable 而不是 subscription