Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将错误从vuex操作传播到vue组件?_Javascript_Vue.js_Vuex - Fatal编程技术网

Javascript 如何将错误从vuex操作传播到vue组件?

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 })

我有一个无模块存储和一个action loginUser,它通过将授权标头保存在以下状态来登录用户:

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都会返回一个承诺。这样抛出的错误就会传播。