Хранение HTTP-ответа в порядке - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю с API, для ответа на который требуется некоторое время, поэтому я подумал о том, чтобы сохранить результаты для него в массиве, по сути кэшируя ответ. Проблема в том, что при подписке все ответы не в порядке, потому что они асинхронные. Сначала я передаю данные в свою наблюдаемую систему, которая затем отвечает соответствующим образом, поэтому важно знать, какие данные были переданы в соответствии с ответом.

this.data[this.i].id 

Массив содержит всю информацию, но все не в порядке, и я не не знаю, какой ответ я подтягиваю точно.

Я использую a для l oop как таковую

    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);
        }
      );
    }

Есть ли простой способ сохранить все мои ответы, передаваемые в мой массив по порядку?

1 Ответ

1 голос
/ 24 февраля 2020

Вы можете использовать forkJoin для выполнения sh этого. Этот оператор берет список наблюдаемых и выдает только если все они передали значение. Результирующий массив находится в том же порядке, в котором были ваши наблюдаемые, когда вы его вызывали. Вы можете использовать его следующим образом:

const observables = this.data.map(data => this.time.getPunchDataWeek(data.id));
forkJoin(...observables).subscribe(results => this.jsonStored.push(...results))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...