Асинхронный пайп или как обновить значение после подгрузки данных?

В различных частях сайта требуется выводить суммы с указанием валюты и еще некоторыми модификациями в зависимости от валюты.
С бека прилетает информация в формате
IMoney {
  sum: number;
  currencyId: number;
}


Требуется пайп, который отобразит это в виде 123$ или 234ETH в зависимости от currencyId

Информация о валютах храниться в сервисе, и этот сервис запрашивает информацию с бека.

Часто случается ситуация что информация, которую надо отобразить загружается раньше чем информация о валютах и пайп не находит нужную валюту. Как это можно решить? Может пайп может отдавать информацию не мгновенно а по срабатыванию Observer'ра?
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 2
Qairat
@Qairat
frontend developer, angular 2+
думаю можно сделать вот так:
в компоненте где надо использовать pipe,
для начало запрашиваешь информацию о валютах,
loading: boolean = false;
 ngOnInit() {
   this.loading = true;
   this.service.getInfoValute().subscribe(res => {
     if (res) {
        this.loading = false;
     }
   });
 }


а в шаблоне проверку поставить:
<ng-container *ngIf="!loading">
  <div>{{ IMoney | pipe }}</div>
</ng-container>
Ответ написан
Комментировать
EreminD
@EreminD
Кое-что умею
Я так понял, вам нужно подписаться на валюты и на суммы
Когда обе пачки данных придут с бэка, выдать производное (сумма, плюс обозначение валюты)
Звучит как
combineLatest
combineLatest(money$,currency$).subscribe(data = > /*тут работа с массивов, где data[0] - это последние пришедшие данные от money$ и data[1] - последние от currency$*/)
или
combineLatest(money$,currency$).subscribe(([money, currency]) = > /*...ваша логика*/)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час