返回嵌套的可观察对象
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
鉴于此方法:
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