美文网首页Vue
Mutation不能使用异步函数,为什么?

Mutation不能使用异步函数,为什么?

作者: ChangLau | 来源:发表于2018-08-30 11:33 被阅读3次

Mutation不能使用异步函数

之前没有太深入研究,只是知道官方文档说不能异步调用Mutation,当初已为异步调用会出错,今天二次复习的时候,专门写了个例子
试试,没想到结果是OK的...那为什么官方文档说不能使用异步调用呢?

先来看我写的Demo

//对象风格提交方式
export const incrementWithObjStyle = (state, payload) => {
  state.count += payload.num
}
//异步提交方式
export const INCREMENT_ASYNC_TRUE = (state, payload) => {
  setTimeout(() => {
    state.count += payload.num
  }, 10000)
}
//组件中调用
addCountWithObjStyle() {
      this.$store.commit({
        type: 'incrementWithObjStyle',
        num: 20
      })
},
addCountWithAsyncTrue() {
    this.$store.commit({
    type: 'INCREMENT_ASYNC_TRUE',
    num: 20
    })
}

我们来看Devtools的Vuex状态图

异步调用.png

这时候Mutation触发,但是内部的异步函数还没有执行完,所以count还是0

同步调用.png

然后我又执行了5次同步操作,这时候异步10秒还没执行完,页面显示的是100,图没截到...

同步调用2.png

等待10秒异步执行完,可以看到页面变为120了,也就是说异步Mutation不会对数据造成丢失和其他影响,然后我们注意Devtools显示结果,当我们去查看多次Mutation状态时,发现同步的显示Ok,异步Mutation的Count显示为0 和我们预期结果不一致,所以会造成状态改变的不可追踪,所以官方说我们Mutation是同步的

相关文章

  • Mutation不能使用异步函数,为什么?

    Mutation不能使用异步函数 之前没有太深入研究,只是知道官方文档说不能异步调用Mutation,当初已为异步...

  • Mutation不能使用异步函数

    为什么必须是同步更新?因为在开发过程中,我们常常会追踪状态的变化。常用的手段就是在浏览器控制台中调试。而在 mut...

  • Vuex之action

    一般开发使用mutation已经足够,不过官网推荐mutation不要有异步操作,那么为了规范,我们应该把异步操作...

  • vue全家桶(4.3)

    5.3.Vuex的核心概念 #5.3.1.Mutation 注意; 在Mutation中,是不能提交异步代码的,例...

  • action和mutation区别

    action中处理异步,mutation不可以mutation做原子操作action可以整合多个mutation的...

  • Mutation和Action的区别

    Mutation中是同步函数和Action中是异步函数,属于一种约定,为了更好的追踪vuex的状态变化,希望我们都...

  • Vuex结合Axios异步请求数据的封装

    首先, 概括下 vuex基本使用流程为: 在action中分发异步请求, 在异步回调中提交mutation,在mu...

  • vuex-Action

    在 mutation 中混合异步调用会导致你的程序很难调试。例如,当你调用了两个包含异步回调的 mutation ...

  • 为什么 Vuex的mutation中不能做异步操作

    Vuex中状态更新的途径是mutation,异步操作通过 Action 来提交 mutation实现,这样使得我们...

  • Vuex-mutation

    mutation是唯一修改state值的入口mutation是一个函数,使用方法类似于自定义事件可以通过$stor...

网友评论

    本文标题:Mutation不能使用异步函数,为什么?

    本文链接:https://www.haomeiwen.com/subject/inerwftx.html