сервис, чтобы в нем с ними работать (получать/фильтровать etc). Часть данных в сервисе приходит из store и из-за этого получается так, что когда в компоненте инжектируется сервис (в конструкторе), то сервис сразу начинает вызывать данные, однако, компонент в ngOnInit начинает с этими данными работать, и получает пустой массив - store не успевает так быстро вернуть данные. Отсюда два вопроса, как можно получить асинхронные данные таким методом, и, разумно ли в принципе такое использование переменных и данных в отдельном сервисе (компонент и сервис в одном кастомном модуле)?
разумно - да, но вот работать с ними как с синхронными в данном контексте - нет. Есть нескольоко вариантов: 1) работать с данными в комопненте ассинхронно, т.е. не сохранять их во внутреннюю переменную, а манипулирвоать потоком 2) сделать дочерний компонент, который будет отрисовываться только когда данные пришли и передавать ему их через @Input - [input]=“list$ | async”. Тогда в дочернем компоненте можно описать синхронную логику работы с данными
ну, в данном случае я думал сделать хранение переменных именно в сервисе, заполнять их там же асинхронно, но чтобы "наружу" они торчали просто как обычные массивы. А если использовать subject'ы для переменных сервиса и подписываться на них в компоненте - имеет место быть такое?
вы в любом случае получите проблему, если данные придут позже того, как вы их запросите. Лучший способ работать с ассинхронными данными - всегда работать с ними ассинхронно(ну или хотя бы всегда учитывать кейс, что они могут быть не доступны на текущий момент времени)
по идее, подписка на сабжекты должна эту проблему решить. Это я к тому, есть ли смысл как-то пытаться фильтровать поток на наличие пустого массива и тд, чтобы ожидать сразу какое-либо значние?
зависит от задачи, но если работать через потоки, то rx сам пушнит измененные данные
Обсуждают сегодня