在項目中遇到關於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