【问题标题】:Angular - how to chain multiple callsAngular - 如何链接多个调用
【发布时间】:2019-02-13 13:39:14
【问题描述】:

在我的 Angular 7 应用程序中,我需要链接多个 HTTP Get 调用,对于任何调用,如果我不需要在下一次调用中直接使用响应,我也需要等待调用完成。

我不想在订阅等中使用订阅,因为代码非常糟糕。

例如,如果我有 4 个功能,实现它的最佳做法是什么?

【问题讨论】:

  • 你可以使用 async/await
  • 如果可能我想避免承诺
  • 如果你想在第二个请求中使用第一个请求的结果,你正在寻找 RxJS switchMap,依此类推。如果您只想等待所有请求完成,请使用 combineLatestforkJoin
  • 你可以使用'rxjs'中的forkJoin; // RxJS 6 语法

标签: angular


【解决方案1】:

试试forkJoin:

linkContractToDepartment(data): Observable<any> {
        return this.httpClient.get<any>(
            '/something/link-contract',
            data
        );
}

calls = [];
calls.push(this.linkContractToDepartment(1));
calls.push(this.linkContractToDepartment(2));


forkJoin(calls).subscribe(response_list=> { console.log(response_list) })

【讨论】:

  • 从对我的问题来看,不清楚他是要等待多个请求还是要在第二次调用中使用第一次调用的结果。对于第二种情况,应使用 switchMap。
  • @CanK。 :他说过I don't need to use directly the response in the next call。所以没有响应的依赖,所以我们可以一次调用所有的
  • @ShashankVivek 我认为很明显需要使用 switchmap...“我需要等待调用才能完成,如果我不这样做 ALSO需要在下次调用时直接使用响应。”
  • 我想如果 OP 写了even if I don't need to use... 会更清楚,但英语不是每个人的母语或第二语言 :)
  • 有时我需要使用先例调用的响应但我经常不需要它,我还需要最后一次订阅中的所有响应,以便我可以详细说明
【解决方案2】:

正如其他人所说,Angular 与 RxJS 完美配合。但是官方文档有点混乱。尝试使用 angular AND RXJS 找到真实世界的示例。示例:https://blog.angularindepth.com/practical-rxjs-in-the-wild-requests-with-concatmap-vs-mergemap-vs-forkjoin-11e5b2efe293

Learn rxjs 是另一个不错的 RxJS 资源

继续:

  • 为了避免订阅,请使用 Observable
  • 如果多个异步调用独立使用 forkJoin
  • 如果异步调用需要先前的异步查询,请使用 mergeMap
  • 如果异步调用需要多个异步查询,请使用 combineLatest

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2020-11-18
    相关资源
    最近更新 更多