在项目中遇到关于action与dispatch使用的一些细节问题,通过搜索获得了一些答案。
特地在此提出,若有错误还请指出,十分感谢~vue
提出这个疑问主要是由于之前一直认为只要dispatch的action是同步的(仅仅commit了一个state),就能够当作是同步的函数进行使用
但在看到vuex的源码的dispatch实现的代码就知道其实dispatch实际上是一个异步函数git
dispatch (_type, _payload) { ... return result.then(res => { try { this._actionSubscribers .filter(sub => sub.after) .forEach(sub => sub.after(action, this.state)) } catch (e) { if (process.env.NODE_ENV !== 'production') { console.warn(`[vuex] error in after action subscribers: `) console.error(e) } } return res }) }
代码能够看到dispatch返回的是一个promise,因此它是一个异步函数,因此即便action里面的逻辑是同步的,若是dispatch以后须要接着用到commit的state变量,仍然须要使用异步写法(dispatch().then(()=> {})
)来实现。github
若有错误,请不吝提出,谢谢!vuex