【发布时间】:2018-05-24 01:43:49
【问题描述】:
import { remoteSettings } from 'somewhere';
const store = {
state: {
view: {
foo: true
}
},
mutations: {
toggleFoo(state) {
state.view.foo = !state.view.foo;
}
},
actions: {
async toggleFoo({ state, commit }) {
commit('toggleFoo');
await remoteSettings.save(state);
}
}
};
假设我有一个像这样的简单商店。 toggleFoo 操作应用突变,然后通过进行异步调用保存新状态。但是,如果remoteSettings.save() 调用失败,我在商店中的本地设置和远程设置不同步。我真正想在这个动作中实现的是这样的:
async toggleFoo({ state, commit }) {
const newState = simulateCommit('toggleFoo');
await remoteSettings.save(newState);
commit('toggleFoo');
}
我想在不实际提交的情况下获得新状态。如果远程调用成功,那么我实际上会更新商店。如果没有,它将保持原样。
实现这一点的最佳方法是什么(实际上不复制突变函数中的逻辑)?也许“撤消”?我不确定。
【问题讨论】: