Javascript 如何将错误从vuex操作传播到vue组件?
我有一个无模块存储和一个action loginUser,它通过将授权标头保存在以下状态来登录用户:Javascript 如何将错误从vuex操作传播到vue组件?,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,我有一个无模块存储和一个action loginUser,它通过将授权标头保存在以下状态来登录用户: loginUser(context, user) { userService.login(user) .then(response => context.commit('SET_AUTHORIZATION', response.data)) .catch(error => { throw error.response.data })
loginUser(context, user) {
userService.login(user)
.then(response => context.commit('SET_AUTHORIZATION', response.data))
.catch(error => { throw error.response.data })
}
问题是我需要登录组件中的错误,并且我无法将其存储在状态中,因为我使存储在会话处于活动状态时保持持久性。
登录组件中的提交函数如下所示:
async onSubmit() {
let user = {
username: this.username,
password: this.password,
}
await this.$store.dispatch('loginUser', user)
.catch(error => {
if(error.response.status === 401) this.loginError = error.message
else console.error(error)
})
await this.$router.push('/').then(() => location.reload())
}
},
这只是在承诺中抛出了一个未捕获的消息。您可以从您的登录用户操作中返回一个,如:
loginUser(context, user) {
return new Promise((resolve, reject) => {
userService.login(user)
.then((response) => {
context.commit('SET_AUTHORIZATION', response.data)
resolve(response)
})
.catch((error) => {
reject(error.response.data)
})
})
}
然后可以更新async onSubmit方法,并使用try..catch捕捉该错误,如:
您可以通过登录用户操作返回一个,如:
loginUser(context, user) {
return new Promise((resolve, reject) => {
userService.login(user)
.then((response) => {
context.commit('SET_AUTHORIZATION', response.data)
resolve(response)
})
.catch((error) => {
reject(error.response.data)
})
})
}
然后可以更新async onSubmit方法,并使用try..catch捕捉该错误,如:
我对承诺并不太熟悉,但我认为这两种承诺都会得到回报。所以抛出的错误会传播。我对承诺不太熟悉,但我认为then和catch都会返回一个承诺。这样抛出的错误就会传播。