按顺序存储 HTTP 响应

Storing HTTP Response in order

我正在处理需要一段时间才能响应的 API,因此我考虑将其结果存储在一个数组中,本质上是缓存响应。问题是订阅时,响应都是乱序的,因为它是异步的。我首先将数据传递到我的可观察对象中,然后它会做出相应的响应,因此了解传递的数据与响应相对应很重要。

this.data[this.i].id 

该数组包含所有信息,但全都乱七八糟,我不知道我到底得到了什么响应。

我这样使用 for 循环

    this.jsonStored = [];
    for (this.i in this.data) {
      this.time.getPunchDataWeek(this.data[this.i].id).subscribe(
        response => {
          this.jsonStored.push(response);
        },
        err => {
          console.error(err);
        }
      );
    }

有没有一种简单的方法可以让我的所有响应按顺序推送到我的数组?

您可以使用 forkJoin 来完成此操作。该运算符获取一个可观察对象列表,并且仅在所有对象都发出值时才发出。结果数组的顺序与调用它时可观察对象的顺序相同。 您可以按如下方式使用它:

const observables = this.data.map(data => this.time.getPunchDataWeek(data.id));
forkJoin(...observables).subscribe(results => this.jsonStored.push(...results))