Vuejs2 vue router.push未捕获(承诺中)未定义
如果用户已登录,我尝试重定向到另一个路由,但出现此错误。 请帮帮我Vuejs2 vue router.push未捕获(承诺中)未定义,vuejs2,Vuejs2,如果用户已登录,我尝试重定向到另一个路由,但出现此错误。 请帮帮我 Uncaught (in promise) undefined 我使用JWT进行身份验证 jwtLogin loginJWT({commit}, payload) { return new Promise((resolve, reject) => { jwt.login(payload.userDetails.email, payload.userDetails.password)
Uncaught (in promise) undefined
我使用JWT进行身份验证
jwtLogin
loginJWT({commit}, payload) {
return new Promise((resolve, reject) => {
jwt.login(payload.userDetails.email, payload.userDetails.password)
.then((response) => {
if (response.data.user_data) {
router.push(router.currentRoute.query.to || '/')
localStorage.setItem('accessToken', response.data.access_token)
commit('updateUserInfo', response.data.user_data, {root: true})
commit('setBearer', response.data.access_token)
resolve(response)
} else {
reject({message: 'Wrong Email or Password'})
}
})
.catch(error => {
reject(error)
})
})
},
单击登录按钮并重新加载页面后,再次单击登录按钮,没有错误
如果单击“登录”按钮后页面未刷新,则会发生错误。您会收到此错误,因为您没有处理promise错误 承诺如果处理得不好,可能会导致不可预测的错误(特别是与不必要的回调函数混合时,这里的情况并非如此) 我发现您的代码中有两个更大的错误:
- 未处理启动承诺错误/成功(未处理/未捕获承诺错误)
- 在保存用户登录数据之前/期间导航(router.push())
login(formdata)
.then((response) => {
// login response success,
// save the userdata and token
resolve(response) // or return(respone)
})
.then((response) => {
// user data succesfully saved,
// and you can do extra check on it
// safe to navigate away
resolve(reponse) // or return(respone)
})
.catch((error) => {
// anything goes bad,
// you land here with error message
// handle the error
})
.finally(() => {
// if finally() is supported by your login method
// you can decide whats next,
// the promise is fulfilled/rejected
})
// other potential (and often made mistake) to do logic here:
// we are 'after' the login method, but not out of the woods yet
// the promise might be still be unresolved/unrejected = undefined
还有其他处理承诺的方法:异步/等待、尝试/捕获但是当方法为“thenable”时,我更喜欢将其链接起来。
更优雅的伊姆霍 快乐的承诺