详细解释vuex中的操作何时完成 以及如何正确调用调度
在项目中,我遇到了一些关于动作和调度使用的细节,搜索后得到了一些答案。
我想在这里提出来。如果有错误,请指出来。非常感谢~
问题1:如果动作是异步的,你怎么知道什么时候完成?答案在vuex官网给出:
注意:如果您需要组合多个动作来完成一些逻辑,那么使用async/wait会更简单
问题2:如果动作是同步的,不需要等它完成吗?
其实这个问题相当于w:dispatch(‘某个动作’)是同步函数还是异步函数。
如果dispatch是异步函数(返回承诺),即使动作中的逻辑是同步的,如果在做一些操作之前需要等待动作完成,那么仍然需要等待dispatch()。然后(()={})异步执行。
我通过查看vuex的源代码找到了答案:
dispatch (_type,_payload) { //检查对象样式的dispatch const { type,payload }=unifyObjectStyle(_ type,_payload) const action={ type,payload } const entry=this。_actions[type] if(!条目){ if (process.env.NODE_ENV!==' production '){ console . error(`[vuex]未知操作类型: ${type}`) } return }尝试{ this。_操作订阅者。过滤器(sub=sub.before)。forEach(sub=sub.before(action,this . state))} catch(e){ if(process . ENV . NODE _ ENV!==' production '){ console . warn(`[vuex]在before action subscribers : `)console . error(e)} } const result=entry . length 1?promise . all(entry . map(handler=handler(payload))):条目[0](payload)返回结果,然后(res={ try { this。_操作订阅者。过滤器(sub=sub.after)。forEach(sub=sub.after(action,this . state))} catch(e){ if(process . ENV . NODE _ ENV!==' production '){ console . warn(`[vuex]在after action subscribers : `)console . error(e)} } return RES })}调度函数返回一个承诺。因此,如果您需要在分派之后跟进(例如,在分派中提交一个状态,然后使用这个状态),正确的方式应该是以异步方式完成后续逻辑
注意:在同步编写中,状态似乎是正确的,但可能只是碰巧我的业务场景io使用率不是很高,所以“似乎是正确的”,严格的方法应该仍然需要使用异步来完成后续操作
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:详细解释vuex中的操作何时完成 以及如何正确调用调度是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。