Appearance
组合 Action
本节目标:理解“组合 Action”的核心思路,并能把它用于实际开发或面试表达。
Action通常是异步的,那么如何知道action什么时候结束呢?更重要的是,我们如何才能组合多个action,以处理更加复杂的异步流程? 首先,你需要明白store.dispatch可以处理被触发的action的处理函数返回的Promise,并且store.dispatch仍旧返回Promise:
actions: { actionA ({ commit }) { return new Promise((resolve, reject) => { setTimeout(() => { commit('someMutation') resolve() }, 1000) }) }}现在你可以:
store.dispatch('actionA').then(() => { // ...})在另外一个 action 中也可以:
actions: { // ... actionB ({ dispatch, commit }) { return dispatch('actionA').then(() => { commit('someOtherMutation') }) }}最后,如果我们利用
async / await,我们可以如下组合 action: // 假设 getData() 和 getOtherData() 返回的是
Promise
actions: { async actionA ({ commit }) { commit('gotData', await getData()) }, async actionB ({ dispatch, commit }) { await dispatch('actionA') //等待 actionA 完成
commit('gotOtherData', await getOtherData()) }}一个 store.dispatch 在不同模块中可以触发多个 action 函数。在这种情况下,只有当所有触发函数完成后,返回的 Promise 才会执行。 > 来自
<https://vuex.vuejs.org/zh/guide/actions.html>