Отказаться от подписки на услуги Angular Singleton? - PullRequest
0 голосов
/ 02 мая 2020

Если у нас есть @injectable синглтон-сервис с инжектором конструктора, который работает следующим образом:

constructor(private ds:DataService) {

   ds.obervable$.subscribe(data=>...)

}

Нужно ли нам отписаться? Кажется, что мы этого не делаем, потому что это служба Singleton, и мы создаем только одну подписку в этом сценарии, и она будет уничтожена, когда служба будет уничтожена, то есть когда приложение закроется.

Сделал Я думаю об этом, верно?

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Он не будет уничтожен, когда служба будет уничтожена. Вы должны сделать это вручную, и такой услуги, как OnDestroy hook, не существует. Тем не менее, это обычно хорошо, потому что синглтон всегда там, когда приложение включено. Единственный случай, когда вам нужно отписаться, это когда вам больше не нужна услуга (например, замените провайдера другим объектом для того же провайдера).

0 голосов
/ 02 мая 2020

Я полагаю, что здесь существует некоторая путаница между жизненным циклом службы и сроком действия подписки на наблюдаемое, которое возвращается этой службой.

Хотя это правда, если мы подписываемся только один раз на наблюдаемая, будет только одна подписка, но это не имеет никакого отношения к тому, является ли сервис одноэлементным. Подписка не принадлежит услуге, она принадлежит потребителю услуги.

Однако неверно считать срок действия подписки связанным со сроком службы. Они имеют полностью независимые времена жизни.

Когда приложение закрывается, оба будут уничтожены, но только потому, что они оба являются частью этого приложения.

...