Vue.js和Vuex中的长轮询与组件的生命周期无关,在哪里存储热点可观察到的“取消订阅”?

问题描述 投票:0回答:1

问题:启动了多个需要在整个应用程序生命周期中持续存在的长轮询流(无论单个组件的生命周期如何),我正在寻找一种方法来取消订阅以响应各种事件(例如路由更改,但不限于)。为此我写了以下代码:

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最佳实践的简洁解决方案?

vue.js vuex polling long-polling
1个回答
0
投票

我们最终建立了一个通过Vue.use注入并在那里存储Observable订阅的插件

© www.soinside.com 2019 - 2024. All rights reserved.