按顺序存储 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))
我正在处理需要一段时间才能响应的 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))