从Vuex Store Action中的Promise返回错误

时间:2019-01-26 13:27:03

标签: vue.js vuejs2 vuex

我正在尝试使用Parser设置登录操作,如果身份验证失败,该操作将返回错误。然后,我想捕获错误并将其返回到显示错误的组件。但是我总是会遇到无法兑现的诺言。

我已经尝试了不同的拒绝或返回错误的方法,但均未成功。         拒绝(错误)(在此推荐Returning Promises from Vuex actions)         返回拒绝(错误)         返回Promise.reject(错误)         返回Promise.reject(new Error(error)) 或简单地         返回错误

我的动作:

actions: {
      login(vuexContext, authData) {
        console.log(authData.email)
        Parse.User.logIn(authData.email, authData.password)
          .then(user => {
            vuexContext.commit('SET_USER', user)
          })
          .catch(error => {
            console.error('Actions login - Error: ' + error)
            reject(error)
          })
      }

我的提交方法:

onSubmit() {
      this.$store
        .dispatch('login', {
          email: this.formData.email,
          password: this.formData.password
        })
        .then(() => {
          // ..
        })
        .catch(error => {
          console.log('Catching' + error)
          if (error.code == 101) {
            this.errorMsg = 'Email oder Passwort falsch'
          } else {
            this.errorMsg =
              'Entschuldigung, hier ist etwas schief gelaufen... Fehler: ' +
              error.message
          }
          this.showError = true
          this.$router.push('/sessions/new')
        })
    }

我希望onSubmit方法中的catch块能够捕获错误。

1 个答案:

答案 0 :(得分:1)

您必须将函数return包装为新的promise。

actions: {
    login(vuexContext, authData) {
      return new Promise((resolve, reject) => {
        console.log(authData.email)
        Parse.User.logIn(authData.email, authData.password)
          .then(user => {
            vuexContext.commit('SET_USER', user)
            resolve()
          })
          .catch(error => {
            console.error('Actions login - Error: ' + error)
            reject(error)
          })
      })
    }
  }