angular - rxjs - Angular : How to wait for an Observable function, 调用另一个返回 Observable 的函数?

标签 angular rxjs rxjs-observables rxjs-pipeable-operators

我在一个服务中有 2 个 API 调用,每个调用都返回一个 Observable,在我的组件中我有一些条件,如果为真,我必须调用这两个函数,但我需要等待 get() 调用,所以我可以使用 get 调用返回的参数执行 post 函数。如果为 false,我只想使用已定义的参数调用 post 函数。

服务:

  get(id: string) {
    return this.http.get<any>('get path');
  }

  post(data: data) {
    return this.http.post<any>('post path', {data: data});
  }

组件:

  execute() {
    if (condition) {
      this.service.get(id).subscribe( (res) =>
        // ...
        this.data = res.data;
        post(data).subscribe(() => // do stuff...);
      );
    } else { post(data).subscribe(() => // do stuff...); }
   }

我不想为 post 调用重复代码,或者如果根本不可能,只是不要在另一个 subscribe() 中使用 subscribe()。我怎样才能做到这一点?没有异步等待。

提前致谢

最佳答案

您可以使用 RxJS switchMap运算符从一个 observable 映射到另一个(在你的例子中是 GET 到 POST)并使用 RxJS iif有条件地返回可观察对象的函数。

尝试以下操作

execute() {
  const getPost$ = this.service.get(id).pipe(
    switchMap((res: any) => {
      this.data = res.data;
      return this.service.post(data);
    })
  );


  iif(
    () => condition,
    getPost$,
    this.service.post(data)
  ).subscribe(
    (res: any) => { 
      // handle response
    },
    (error: any) => {
      // handle error
    }
  );
}

关于angular - rxjs - Angular : How to wait for an Observable function, 调用另一个返回 Observable 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67385195/

相关文章:

javascript - RxJS 如何从两个 promise 中获取第一个不为空的值

javascript - 相当于 typescript 中的异步管道

twitter-bootstrap - Angular 4 CLI,WebPack,为整个网站动态切换 Bootstrap 主题

angular - 配置 Observable 以在推送新值时将所有先前值作为数组返回?

angular - 无法使用 angularfire2 访问 Angular 6 应用程序中的多个 Google Firestore DB

angular - 如何在 RxJs 订阅中添加缓冲区和去抖限制

Angular Universal Render 等待 Http 结果 Observable Subscriber

angular - 如何在链接的 observables 之间传递结果

javascript - 对象的类型为 'unknown'

javascript - TypeScript:按顺序发送多个 HTTP 请求 Angular2