鉴于此方法:
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);
});
}
我希望它返回嵌套的可观察值,以便我的调用代码可以像这样使用它:
this.apiService.logIn(credentials).subscribe(() => {
// redirect user to their dashboard
});
无需了解第一个 /csrf-cookie
请求。显然上面的方法不起作用 - 但我正在努力理解如何使内部 HTTP 请求等待外部请求完成并由该方法返回。
最佳答案
您应该使用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 嵌套订阅通常不是一个好主意。图书馆内有许多优秀的运算符(operator)可以帮助您解决问题。在上面的这种情况下,一个调用依赖于另一个 switchMap(...)
是最合适的。
此外,代码已被修改为返回可观察
而不是订阅
关于javascript - 返回嵌套的可观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66540469/