Angular 按顺序存储HTTP响应

Angular 按顺序存储HTTP响应,angular,angular-httpclient,Angular,Angular Httpclient,我正在使用一个需要一段时间才能响应的API,因此我考虑将结果存储在一个数组中,本质上是缓存响应。问题在于订阅时,响应都是无序的,因为它是异步的。我首先将数据传递给我的可观察对象,然后它会做出相应的响应,因此知道传递的数据对应于响应是很重要的 this.data[this.i].id 数组中有所有的信息,但都是无序的,我不知道我到底得到了什么样的响应 我使用for循环 this.jsonStored = []; for (this.i in this.data) {

我正在使用一个需要一段时间才能响应的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);
        }
      );
    }
有没有一种简单的方法可以让我的所有响应按顺序推送到我的数组中?

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

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

你有权访问后端吗?如果你这样做了,也许你可以按顺序发送回复。像
SELECT*fromsuserorderbyid-DESC/ASC
这样就行了!但我在访问jsonStored时遇到了问题。我再也不能像数组一样访问它了。知道发生了什么吗?jsonStored[0]记录为未定义。您是否试图在forkJoin observable发出任何值之前访问jsonStored?…是。对不起,谢谢你。我用完整的回调方法记录了它,我可以看到有什么。