Что происходит с полной наблюдаемой? Что если я подпишусь на законченную наблюдаемую? - PullRequest
0 голосов
/ 03 января 2019

У меня проблемы с поиском того, что происходит с Наблюдаемым, когда он завершится.У меня есть наблюдаемое, которое должно завершиться, прежде чем я сделаю другую работу.Для этого другие мои функции подписываются на эту наблюдаемую, и когда она завершается, они выполняют свою работу.

У меня вопрос: что происходит, когда они подписываются после Наблюдения завершено?Из моего тестирования выясняется, что они получают последнее значение, а затем оно завершается (он запускает обратные вызовы value и complete для метода subscribe).Я бы предпочел просто не подписываться на него, если он уже завершен.

Есть ли способ проверить, завершено ли Observable без подписки? Я установил его неопределенным после завершения, но это создает проблему, если я подписан на Observable из другой функции, когдаэто происходит.

Я мог бы создать субъект поведения isLoaded, который начинается как Ложь и становится истинным, когда это сделано, но у меня возникают проблемы с поиском документации о том, что делает завершенная наблюдаемая при подписке икакая лучшая практикаСпасибо!

Редактировать: Это не спрашивает, как проверить, завершена ли наблюдаемая.Он спрашивает, что произойдет, если заметка завершена из другой подписки, как вы можете проверить, что она завершилась.Что происходит с наблюдаемой, когда она завершена, и вы смотрите на наблюдаемый объект.

1 Ответ

0 голосов
/ 04 января 2019

По умолчанию наблюдаемый ведет себя как одноадресный. Одноадресная передача означает, что это 1: 1 отношение к подписке, так же как и функция. Подумайте о самой простой функции, которую вы можете представить, как показано ниже:

function boo() { //do something }
boo();

Вам нужно вызвать функцию , чтобы вызвать что-то. То же относится и к наблюдаемым -

const someObservable = of(1,2,3);

someObservable.subscribe(...);

someObservable не делает ничего , пока вы не подпишетесь на него. Поэтому нет смысла проверять, завершено ли это или нет, поскольку вы ни на что не подписывались. Также нет смысла проверять, завершена ли другая подписка или нет, так как это отношение 1: 1 к подписке. Вы можете проверить состояние подписки, но оно отличается от состояния завершения.

Теперь есть другой тип наблюдаемой, multicast - который обычно представлен в реализации Subject. Это делает испускание независимо от подписки, и вы можете проверить, является ли это closed, чтобы найти, что сам источник уже закрыт. В зависимости от характера субъекта, вы можете наблюдать различное поведение, обычно вы ничего не получите, если попытаетесь подписаться на завершенную для многоадресных наблюдаемых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...