Я хоббист и учусь на английском один год. Когда я пытался разработать собственный сервис разбивки на страницы для извлечения данных из firebase, я обнаружил, что при использовании асинхронного канала или обычной подписки наблюдаются разные массивы, возвращающие разные массивы.
По сути, моя наблюдаемая использует оператор сканирования для накопления данных, извлекаемых из базы данных. У него есть 2 метода: init, чтобы получить первые данные и установить наблюдаемый с начальными данными, и addData, который выбирает больше данных.
После запуска службы и добавления некоторых данных, если я ее снова инициирую, она не будет сбрасывать данные при использовании обычной подписки. Но если используется асинхронный канал, служба сбрасывает данные, как и ожидалось. Почему подписка и асинхронный канал имеют разное поведение, когда ожидается, что они будут одинаковыми?
Я создал упрощенное воспроизведение ошибки в stackblitz:
https://stackblitz.com/edit/angular-3vroi2
При нажатии кнопки «сброс данных» возврат из подписки не сбрасывается. И те же данные, возвращаемые асинхронным каналом, соответственно сбрасываются.
На данный момент я уже использую асинхронный канал для своего проекта, но все еще не могу понять, почему они не работают одинаково. Надеюсь, что кто-нибудь поможет мне разобраться.