从异步 Vuex 操作中捕获组件中的错误

ben*_*e89 3 try-catch async-await vue.js vuex

我有一个异步操作,如下所示:

export const fetchTweets = async ({ commit, state }) => {
  const tweetFetchError = error => {
    // throw here?
  }
  try {

    const { oAuthAccessToken, oAuthAccessTokenSecret, user: { id } } = state

    const { data, errors } = await api.fetchTweets(oAuthAccessToken, oAuthAccessTokenSecret, id)

    if (errors && Object.keys(errors).length) return tweetFetchError(errors)

    commit(types.SET_TWEETS, {
      tweets: data
    })
  } catch (error) {
    tweetFetchError(error)
  }
}
Run Code Online (Sandbox Code Playgroud)

我从我的组件调用,如下所示:

methods: {
    ...mapActions(['fetchTweets']),
    async handleFetchTweets () {
      try {
        await this.fetchTweets()
      } catch (error) {
        console.log('errored')
        this.$message.error('Error fetching tweets')
      }
    }
},
Run Code Online (Sandbox Code Playgroud)

我打电话给handleFetchTweets安装的。

我的问题是,如何在组件中捕获错误?在 Action 中,tweetFetchError当出现错误时会正确调用此方法,但我不确定如何catch在组件中的 try/catch back 中触发

tha*_*ksd 5

fetchTweets方法中捕获错误后,您需要抛出错误:

  ...
  } catch(error) {
    tweetFetchError(error)
    throw error;
  }
}
Run Code Online (Sandbox Code Playgroud)

并使用返回的 Promise.catch处理程序捕获错误:

async handleFetchTweets () {
  await this.fetchTweets().catch((error) => {
    console.log('errored')
    this.$message.error('Error fetching tweets')
  });
}
Run Code Online (Sandbox Code Playgroud)