Долгий опрос в Vue.js и Vuex, который не зависит от жизненного цикла компонентов, где хранить горячие наблюдаемые для «отписки»? - PullRequest
0 голосов
/ 31 января 2019

Проблема: запустив несколько потоков длинных опросов, которые должны сохраняться в течение жизненного цикла приложения (независимо от жизненного цикла отдельных компонентов), я ищу способ отписаться в ответ на различные события (например, изменение маршрута, ноне ограничивается).С этой целью я написал следующий код:

export const actions: ActionTree<TasksState, RootState> = {
  async pollEventTasks({ dispatch, commit, state, rootState }, payload: any) {

    const pollEventTasks$ = timer(0, 5000).pipe(
      switchMap(_ => tasksService.loadTasksForEvent(payload.eventId)),
      map((response: any) => {
        commit('setTasks', response);
      })
    ).subscribe();

    // this won't work in strict mode. Hot observables ~can't~ shouldn't be written to store:
    // commit('longPolling/eventTasksPollingStarted', pollEventTasks$, {root: true});
  },

Горячая наблюдаемая «обновляет себя», таким образом изменяя хранилище вне обработчика мутаций.Каким было бы аккуратное решение, подходящее для лучших практик vue / vuex?

1 Ответ

0 голосов
/ 21 февраля 2019

В итоге мы создали плагин, добавленный через Vue.use, и сохранили там наблюдаемые подписки

...