javascript - 返回嵌套的可观察值

标签 javascript angular typescript rxjs 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);
  });
}

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

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/

相关文章:

Javascript 通过数据属性中的函数名回调

javascript - 在 JavaScript 中本地读取外部文件集合

typescript - 在 Angular2/Typescript 中监听对象字段的变化

angular - pathMatch 路由错误

javascript - 如何使用 for 循环构建一系列 promise 的响应?

javascript - 如何对使用的特定 jQuery(和 Javascript)方法/函数进行特征检测/测试

angular - 如何在 Resolve Angular 2 中获取路由参数

javascript - tsconfig 中的 `include` 和 webpack 中的 `entry` 字段有什么区别?

javascript - 当我从使用服务获取的数组中删除一个元素时,它在哪里被删除?

javascript - Rails 5 Live Search with Keyup 丢失输入焦点 Turbolinks