详解vuex中action何时完成以及如何正确调用dispatch的思考
在项目中遇到关于action与dispatch使用的一些细节问题,经过搜索得到了一些答案。
特意在此提出,如有错误还请指出,十分感谢~
问题1:如果action是异步的,那么怎么知道它什么时候完成?在vuex的官网给出了答案:
注:如果需要通过组合多个action来完成某些逻辑,用async/await会更简单一点
问题2: 如果action是同步的,就不需要等待它完成了吗?
其实这个问题相当于在w:dispatch('some action')是一个同步函数还是异步函数。
如果dispatch是一个异步函数(返回一个promise),那么即使action里面的逻辑是同步的,如果需要等待这个action完成之后才进行某些操作,仍然是需要用异步等待dispatch().then(()=> {})
来实现
通过查看vuex的源码找到了答案:
dispatch (_type, _payload) { // check object-style dispatch const { type, payload } = unifyObjectStyle(_type, _payload) const action = { type, payload } const entry = this._actions[type] if (!entry) { if (process.env.NODE_ENV !== 'production') { console.error(`[vuex] unknown action type: ${type}`) } return } try { this._actionSubscribers .filter(sub => sub.before) .forEach(sub => sub.before(action, this.state)) } catch (e) { if (process.env.NODE_ENV !== 'production') { console.warn(`[vuex] error in before action subscribers: `) console.error(e) } } const result = entry.length > 1 ? Promise.all(entry.map(handler => handler(payload))) : entry[0](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,所以dispatch后如果需要跟进操作(比如dispatch里面commit了一个state,后续要用到这个state),正确的做法应该是需要用异步的方式来完成后续的逻辑
注:用同步的写法看起来好像state也是对的,但可能只是恰好我的业务场景io使用不是很高所以"看起来是对的",严谨的做法应该还是需要用异步来完成后续操作的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- Vue SPA单页应用首屏优化实践
- 详解vue之自行实现派发与广播(dispatch与broadcast)
- Vue实现boradcast和dispatch的示例
- vue-cli单页面预渲染seo-prerender-spa-plugin操作
- vuex中store存储store.commit和store.dispatch的用法
- Vue SPA 初次进入加载动画实现代码
- Vue实现数据表格合并列rowspan效果
- vue spa应用中的路由缓存问题与解决方案
- 解决Vue+Electron下Vuex的Dispatch没有效果问题
- VUE解决微信签名及SPA微信invalid signature问题(完美处理)
- Vue SPA 首屏优化方案
相关文章
vue-element-admin搭建后台管理系统的实现步骤
本文主要介绍了vue-element-admin搭建后台管理系统的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-10-10
最新评论