Vuex的mutation中不能做异步操作的原因是因为mutation必须是同步函数。这是因为Vuex的设计原则是通过mutation来改变状态,而状态改变后,视图会立即更新。如果mutation中是异步操作,那么当状态改变时,视图可能还没有更新完成,这会导致视图和状态不一致的情况。
另外,如果mutation中进行异步操作,那么就无法保证状态的改变是按照预期的顺序执行的,这可能会导致一些难以预料的问题。
如果需要进行异步操作,可以在action中进行。action可以包含任意异步操作,当异步操作完成后,再通过调用mutation来改变状态。这样可以保证状态的改变是按照预期的顺序执行的,同时也保证了视图和状态的一致性。
除了保证状态改变的一致性和可预测性,Vuex要求mutation必须是同步函数还有另一个重要的原因,那就是为了确保devtools中的时间旅行功能可以正常使用。
当你在开发过程中使用Vuex,你可能会使用Vue Devtools插件来帮助调试你的应用。这个插件有一个非常有用的特性,那就是时间旅行。你可以记录应用的状态改变,然后随时回滚到某个特定的状态。
但是,这个特性只适用于同步的mutation。如果mutation是异步的,那么当状态改变时,devtools可能无法准确地捕获到这个改变,因此也就无法进行时间旅行。
所以,总的来说,Vuex要求mutation必须是同步函数是为了保证状态改变的一致性和可预测性,以及确保devtools中的时间旅行功能可以正常使用。如果你需要进行异步操作,那么应该使用action来进行。