有一个关于VUE并发的问题,非专业前端比较疑惑
created() {
let test = store.state.test // 44行
//这里有没有可能出现:44行获取了旧数据,然后45行store的test设置成功,然后48没有接收到订阅消息?
// 44行和49行是不是应该互换位置?
const unsubscribe = store.subscribe((mutation, state) => { // 49行
console.log('监听订阅', mutation, state)
test = state.test
})
//this.setModel()
},
关于 LearnKu
不会啊,vue的状态机制就有考虑这种问题。话说前端的并发没法高到后端的并发的。 前端并发看的是单个用户的手速
ChatGpt 这样说:
在你提供的代码中,
store.state.test的值在created()生命周期钩子中被赋值给test变量。然后,你订阅了 Vuex store 的 mutation,以便当test状态改变时更新test变量的值。关于你的问题:是否可能在第44行获取旧数据,然后在第45行
store的test设置成功,然后第48行没有接收到订阅消息?这是可能的。在 JavaScript 中,代码是同步执行的,这意味着在订阅函数设置之前,如果
store的test状态已经改变,那么订阅函数将不会接收到这个改变。因此,如果store的test状态在第44行和第49行之间的某个时刻改变,那么test变量将不会更新。第44行和第49行是否应该互换位置?
如果你想确保
test变量始终反映store的test状态的最新值,那么应该首先设置订阅函数,然后再获取store.state.test的值。这样,即使store的test状态在订阅函数设置之后立即改变,订阅函数也会接收到这个改变,并更新test变量的值。所以,是的,你应该先设置订阅函数(即将第49行的代码放在第44行),然后再获取store.state.test的值。这是修改后的代码:
请注意,这只确保了在订阅函数设置之后的
store的test状态改变能被捕获。如果store的test状态在created()生命周期钩子执行之前就已经改变,那么test变量的初始值可能仍然是旧的。