Как я могу упорядочивать array 'n' элементы, которые получают с 'n' асинхронные просьбы?

Контекст

У нас есть вид предложений в покрывале алтаря, у которого есть этот аспект:

<table>
  <tbody>
    <tr *ngFor="let offer of offerList">
      <td>{{offer[0].appArea.creationDate}}</td>
      <td>{{offer[0].client.id}}</td>
      <td>{{offer[0].client.name}}</td>
      ...
    </tr>
  </tbody>
</table>

Эта offerlist он подбирается с базы данных менее традиционной формы: сохраняют в базе данных только ids и hash, с которым соглашаются на сеть IPFS, которая является той, у которой есть данные о предложениях.

Кроме того, будь собран таким образом что, чтобы получать array n предложения, они делаются точно n + 1 просьбы: первая приносит array с ids и hash, и n следующие это результат повторения из-за этого array и IPFS просит в данные:


export class OffersComponent implements OnInit{

  offerList: Array<any> = []

  loadOffersForClient(email) {

    this.offerService.getOwnerInitialOffers(email).subscribe(
      (initOfferResponse) => {
        initOfferResponse[0].offers.map((item) => {

          this.offerService.getOfferFileData(item.hashId).subscribe(
            (itemResponse) => {
              this.offerList.push([itemResponse, item, ]);
            }
          );
        });
      }
    );
  }
}

Услуга делает простые вызовы с клиентом http:

export class OfferService {

  constructor(private http: HttpClient) { }

  getOwnerInitialOffers(email: string) {
    return this.http.post<any>(`path/to/offers/${email}`); // se traen datos por post porque asi esta especificada la api
  }

  getOfferFileData(hashId: string) {
    return this.http.get<any>(`path/to/file/server/${hashId}`);
  }
}

Проблема

Требования изменились и мы нуждаемся в том, чтобы упорядочить array. В дату, чтобы быть более точными. Проблема приходит, из-за которого я не осознаю, когда я могу упорядочивать array будучи уверен, что элементы закончили наполняться.

До настоящего времени, мне случилось приказывать это из-за грубой силы, каждый раз, когда бросается новая просьба:

this.offerService.getOfferFileData(item.hashId).subscribe(
  (itemResponse) => {
    this.offerList.push([itemResponse, item, ]);
    this.offerList.sort((a, b) => {
      const firstDate = a[0].applicationArea.creationDateTime;
      const secondDate = b[0].applicationArea.creationDateTime;
      return (firstDate < secondDate) ? 1 : ((firstDate > secondDate) ? -1 : 0);
    });
  }
);

Помимо того, чтобы быть невероятно неэффективным, оно не функционирует, я понимаю, что элементы не были загружены для, когда распорядок случается.

Как я могу убеждаться в том, что array уже был загружен, чтобы мочь упорядочивать единственный раз, и без риска которого они ввели новые элементы?

6
задан 08.05.2019, 13:57
0 ответов