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

时间:2017-09-21 17:54:12

标签: vue.js async-await try-catch 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)
  }
}

我从我的Component中调用,如下所示:

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

我在已安装的地方呼叫handleFetchTweets

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

1 个答案:

答案 0 :(得分:3)

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

  ...
  } catch(error) {
    tweetFetchError(error)
    throw error;
  }
}

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

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