【问题标题】:Make multiple http requests in parallel并行发出多个 http 请求
【发布时间】:2019-10-30 06:09:21
【问题描述】:

我有一个函数,它在调用时应该并行发出多个 http 请求。 在下面的代码中,我有一个元素数组。我需要为每个元素调用 patchElements 方法并调用 updateData。当我运行它时,只会在 updateData 中进行 http 调用,但如果我在 patchElements 中 console.log 一些东西,它就会被打印出来。

我不确定我做错了什么。

updateCriteria(id, values, elements) {
    return forkJoin(
      elements.map((el) => this.patchElements(rtId, values, el)),
      this.updateData(id, values)
    ).pipe(
      tap(() => {
        // do something
      }),
      catchError((err) => {
        // do something
    ).subscribe();
}

patchElements(id, values, elements) {
    return this.http.patch(*url*);
}

updateData(id, updates) {
    return this.http.put(*url*);
}

【问题讨论】:

  • 我想指出您应该更改您的 updateData 端点,以便它可以将数组作为参数。这样,您只需执行一次昂贵的网络往返,而不是与您的元素一样多次。

标签: angular rxjs


【解决方案1】:

forkJoin() 来自 rxjs 的函数只能接收一组完成的 promise 和 observables,以及您作为数组提供的属性之一。这应该有效:

updateCriteria(id, values, elements) {
    return forkJoin([
      ...elements.map((el) => this.patchElements(rtId, values, el)),
      this.updateData(id, values),
    ]).pipe(
      tap(() => {
        // do something
      }),
      catchError((err) => {
        // do something
    ).subscribe();
}

patchElements(id, values, elements) {
    return this.http.patch(*url*);
}

updateData(id, updates) {
    return this.http.put(*url*);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2011-01-08
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2022-07-26
    • 2020-09-11
    相关资源
    最近更新 更多