【问题标题】:best way to pass results of one forkJoin to another via http通过http将一个forkJoin的结果传递给另一个的最佳方法
【发布时间】:2019-11-26 16:51:28
【问题描述】:

我需要进行多次 http 调用(角度)并将一个 forkJoin 的结果返回给另一个。 以下将不起作用:

Observable.forkJoin([
       this.userService.createAccountHttp(accountRequest),
       this.userService.verifyAccountHttp(res)
 ]);

createAccount() {
  return this._http.jsonp<any[]>('http://...', 'callback').pipe(
      map(v => {
        return v;
      })
}
verifyAccountHttp(res) {
  return this._http.jsonp<any[]>('http://some url/' + res, 'callback').pipe(
      map(v => {
        return v;
      })
}

因为 res 是未定义的。 有没有办法使用 forkJoin 运行连续的 http 调用并将一个 http 调用的结果传递给下一个?

谢谢

【问题讨论】:

  • 请您分享您的请求示例
  • 添加到问题中,tx

标签: angular rxjs rxjs6 fork-join


【解决方案1】:

我不确定我是否正确解释了您的问题,但是您可以考虑使用 RxJS switchMap 运算符。 switchMap 将允许您将可观察值从 createAccountHttp 映射到内部可观察值。

this.userService.createAccountHttp(accountRequest)
  .pipe(
    switchMap((res) => this.userService.verifyAccountHttp(res)),
  ).subscribe((res) => {
    // do the rest here
  });

【讨论】:

  • 谢谢...没有办法使用 forkJoin 来运行连续的 http 调用并将一个 http 调用的结果传递给下一个?
  • @born2net 不,如果您需要第一个 api 调用的响应来进行第二个调用,您需要等待第一个响应。
  • @born2net 很遗憾,不,这是由于 TypeScript/JavaScript 上的异步操作的性质。您需要等待来自createAccountHttp 的 observables 被订阅/返回,然后才能使用下一组操作/请求的结果。唯一可以使用forkJoin/combineLatest 之类的方法是在两种方法都被触发并且它们不需要相互依赖时。
  • 我的印象是 forkJoin 就像 promiseAll 并且您可以对调用进行排序?
  • @born2net 你是绝对正确的!对于可观察对象,forkJoin 等效于 Promise.all。但是,在您的情况下,第二个请求(verifyAccountHttp)依赖于第一个请求(createAccountHttp),因此您无法同时触发它们。您只能按照我上面建议的方法依次执行它们。
猜你喜欢
  • 1970-01-01
  • 2015-11-19
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
相关资源
最近更新 更多