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())
即使您认为自己已经登录,这两种方法都会给您带来错误

此外,if/then条件在承诺链中不是必需的,如果做得正确,它可以自行处理

希望此伪代码能帮助您更好地理解:

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”时,我更喜欢将其链接起来。
更优雅的伊姆霍

快乐的承诺