从一个vuex操作(togglePostLike
)我尝试使用async / await等待另一个vuex操作(requiresAuth
)。
我曾预料到如果return Promise.resolve()
从未被调用过,那么第一个动作应该在await dispatch
处停止(并收集垃圾),但即使没有解决方案,也会进入console.log('this is called SECOND')
难道没有决心等待停止执行吗?我怎样才能达到预期的行为?
/store/modules/post.js
async togglePostLike ({ dispatch, rootState }, post) {
await dispatch('user/requiresAuth', null, { root: true })
console.log('this is called SECOND, but why without resolve')
// I don't want this stuff to execute without the resolve
if (post.likes.includes(rootState.user._id)) {
dispatch('addPostUnlike', post)
} else {
dispatch('addPostLike', post)
}
},
/store/modules/user.js
async requiresAuth ({ state }) {
if (!state.authenticated) {
router.push({ name: 'login', query: { comeBack: true } })
$(`.modal`).modal('hide')
console.log('this is called first')
} else {
console.log('this is NOT called')
return Promise.resolve()
}
},
编辑:如果没有async / await,它的外观
据我所知vuex docs,dispatch
无论如何都会返回一个承诺。使用以下内容:
post.js
if (dispatch('user/requiresAuth', null, { root: true })) {
// still executes before return false
}
user.js的
requiresAuth ({ state }) {
if (!state.authenticated) {
// do stuff (does it)
return false
}
return true
}
答案 0 :(得分:4)
像async function
这样的requiresAuth
总是返回一个使用返回值解析的promise(如果没有评估undefined
语句,则包括return
)。函数是否在没有return
,return;
,return undefined;
,return Promise.resolve()
或return Promise.resolve(undefined)
的情况下结束没有区别它们与外界无法区分。
返回一个布尔值然后对其进行分支,或者只是抛出异常。