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