Я знаю, что есть похожие темы, но нет ни одной, которая дала бы подходящее решение для моей проблемы.
Pre: Я перемещаюсь на стороне сервера и на стороне клиента одновременно. Это означает, что каждая навигация во внешнем интерфейсе с помощью routerLink и любого вызываемого маршрута сопровождается вызовом HTTP-запроса на сервер.
Ситуация: я открываю диалоговое окно, чтобы показать форму для создания файла position
. Для этого position
мне нужно показать список elements
, которые я загружаю из API. Для каждого element
мне нужно загрузить дополнительный thumbnail
. Поэтому мне нужен один вызов API, чтобы получить 86 elements
, а затем 86 запросов, чтобы получить thumbnail
. Я сохраняю эти элементы в службе, чтобы предотвратить их повторную загрузку. Поэтому я проверяю, есть ли уже elements
, прежде чем загружать их. Вызовы API запускаются, когда я открываю диалог.
getElementsWithThumbnails() {
if (this.elementsSource.value.length === 0) {
this.apiService.getElements().subscribe(
(next) => {
this.elementsSource.next(next);
this.elementsSource.value.forEach((epl, index) => {
const format = 'JPG';
this.apiService.getThumbnail(epl.id, format, '400', '400', 'true').subscribe(
(blob) => {
epl.thumbnail = blob;
}
);
});
}
);
}
}
ThumbnailRequestMethod:
getThumbnail(
elementId: string, format: string, width: string,
height: string, sameratio: string
): Observable<SafeUrl> {
return this.httpClient.get(
this.apiUrl +
`/elements/${elementId}/thumbnail?format=${format}&width=${width}&height=${height}&sameratio=${sameratio}`
, {
responseType: 'blob'
}).pipe(
map(res => {
return this.blobToSanitizedUrl(res);
})
);
}
Проблема: если пользователь решает отменить форму и хочет перейти вперед/назад - он не может, потому что navigation request
находится в конце очереди.
Есть ли какой-либо метод, который устанавливает приоритет вызовов thumbnail
для более низкого уровня, который будет обрабатываться при меньшей нагрузке?
Заранее спасибо.