У нас есть вид предложений в покрывале алтаря, у которого есть этот аспект:
<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 уже был загружен, чтобы мочь упорядочивать единственный раз, и без риска которого они ввели новые элементы?