Причина, по которой услуги не должны состоять в том, что она приводит к условиям гонки, когда у вас есть несколько потоков, обращающихся к службе.
Общей проблемой с состоянием службы является:
- поток 1 записывает в состояние
- поток 2 записывает в состояние
- поток 1 читается из состояния
- поток 2 читается из состояния
Поток 1 теперь имеет неправильное значение.
Это, как говорится, JavaScript в настоящее время однопоточный, поэтому у вас не будет проблем с доступом к потоку, подобных этому. Тем не менее, я был бы обеспокоен, если бы у меня была служба, в которой все асинхронные $ http-вызовы записывались в одну и ту же служебную переменную. Если бы только я мог лучше спать ночью, я бы попытался написать все свои методы обслуживания, чтобы они были сквозными данными для фактических данных.
Вместо того, чтобы поддерживать государство в службе, вы могли бы рассмотреть возможность максимально возможного включения состояния в бэкэнд. Такие вещи, как «аутентифицированные» или даже ширины и высоты, могут поддерживаться и запрашиваться. Это может открыть некоторые возможности для того, чтобы пользователи могли перейти от приложения, вернуться и найти все свои настройки, которые все еще настроены и вошли в систему. Вы можете сохранить идентификатор сеанса в файле cookie и сохранить все это на бэкэнд.
Если вы выбрали путь к отдельному объекту для хранения состояния, вы могли бы исправить его из службы, если что-то в состоянии изменилось: как испускать события с завода . Это могло бы иметь хороший побочный эффект, заключающийся в том, что несколько служб могут изменять состояние унифицированного приложения, поскольку состояние не сохраняется в какой-либо одной службе (или, что еще хуже, распределяется между несколькими службами).