【uni-app】封装一个uni轮询请求

如果你想要销毁上一个轮询,并创建一个新的轮询,那么你需要完成以下两个步骤:

  1. 定义一个名为restartPolling的action,用于停止当前的轮询并启动一个新的轮询。在这个action中,你可以先调用stopPolling action 停止当前的轮询,然后通过创建一个新的setInterval来启动一个新的轮询任务。

  2. 在组件中调用restartPolling action 来执行轮询的重启。

下面是一个示例代码:

// store.js

const state = {
  pollingIntervalId: null, // 保存 setInterval ID 的状态属性
}

const actions = {
  startPolling({ commit, dispatch, state }) {
    const intervalId = setInterval(() => {
      // 执行请求操作...
    }, 1000)
    commit('setIntervalId', intervalId) // 将 setInterval ID 存储到状态中
  },
  stopPolling({ commit, state }) {
    clearInterval(state.pollingIntervalId) // 停止当前的轮询
    commit('setIntervalId', null) // 清除状态中的 setInterval ID
  },
  restartPolling({ dispatch, state }) {
    dispatch('stopPolling') // 停止当前的轮询
    const intervalId = setInterval(() => {
      // 创建一个新的轮询任务...
    }, 1000)
    commit('setIntervalId', intervalId) // 将 setInterval ID 存储到状态中
  },
}

const mutations = {
  setIntervalId(state, payload) {
    state.pollingIntervalId = payload
  },
}

export default new Vuex.Store({
  state,
  actions,
  mutations,
})

在上面代码中,我们首先定义了一个名为pollingIntervalId的状态属性,用于保存当前轮询任务的setInterval ID。然后,我们在startPolling action中,执行请求操作并将setInterval ID 存储到状态中。在stopPolling action中,我们会使用clearInterval方法停止当前的轮询任务,并清除状态中的setInterval ID。最后,在restartPolling action中,我们会先调用stopPolling action 停止当前的轮询任务,然后创建一个新的setInterval来启动一个新的轮询任务。这个新的setInterval ID 也会被存储到状态中。

接下来,在组件内部,你可以像下面这样来调用restartPolling action:

this.$store.dispatch('restartPolling')

希望这可以帮助到你!

你可能感兴趣的:(uni-app)