javascript - electro-vue ~ 无法使用 RxJS 订阅更新 vuex 状态

标签 javascript vue.js vuex electron-vue

我的突变中有两个函数和两个状态

const state = {
  files: [],
  uploadProgress: 0
}

const mutations = {

  SET_UPLOAD_IMAGE: (state, files) => {
    state.files = files
  },

  UPLOAD_IMAGE: (state) => {
    StandbyService.uploadImage(state.files).subscribe(progress => {
      state.uploadProgress += progress
      console.log(`Upload Progress ${progress}%`)
    })
  }

}

SET_UPLOAD_IMAGE用于设置文件状态,UPLOAD_IMAGE用于触发将图像上传到服务器。上传进程运行并返回上传进度。我的 uploadImage() 返回一个 Observable,我想在收到进度时更新 uploadProgress 状态,但我不能这样做。控制台一直报错,如下图所示:

enter image description here

我不知道该如何处理这个错误。我已经为此花费了 4 个多小时。 我非常感谢您的帮助和建议。非常感谢。

最佳答案

您需要对所有异步任务使用操作。这就是文档所说的

Actions are similar to mutations, the differences being that:

  1. Instead of mutating the state, actions commit mutations.
  2. Actions cancontain arbitrary asynchronous operations.

此外,正如文档中提到的,突变不是异步的,这一点也很重要。

One important rule to remember is that mutation handler functions must be synchronous.

您可以编写一个操作并根据需要提交您的进度

const state = {
  files: [],
  uploadProgress: 0
}
const action:{
  uploadImage({commit,state}, payload){
   StandbyService.uploadImage(state.files).subscribe(progress => {
      commit('updateProgress', progress)
      console.log(`Upload Progress ${progress}%`)
    })
  })
  }
}
const mutations = {

  SET_UPLOAD_IMAGE: (state, files) => {
    state.files = files
  },

  UPLOAD_IMAGE: (state) => {
    //you don't need it anymore
  },

  UPDATE_PROGRESS: (state, progress){
    state.uploadProgress += progress
  },

}

希望对您有所帮助。

关于javascript - electro-vue ~ 无法使用 RxJS 订阅更新 vuex 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51323271/

相关文章:

javascript - Vue 3 事件命名约定让我感到困惑

vue.js - Vuex - 何时从 http 服务器加载/初始化存储数据

javascript - 带有透明三 Angular 形的下拉菜单(需要帮助)

javascript - 计算方法未根据 vue js 中的更改复选框值进行更新

c# - 如何在 JavaScript 中加密字符串并在 C# 中解密该字符串

javascript - Vue.js:从 jQueryUI slider 、搜索关键字和流派中过滤一组包含 2 个浮点值之间的值的数据

javascript - 使用 Vuex,当项目是对象数组的一部分时,如何从数组中删除它们?

vue.js - 如何使用 websocket 突变组织 vuex

javascript - jquery滚动到顶部高度问题

javascript - False '0' 嵌入字符串中带有前缀的八进制文字