首页 > 解决方案 > 如何在 vuex 的 return 语句中编写 async/await

问题描述

我最初有这个代码:

export function InitActions($api) {
  return {
    [partnersMts.PARTNERS_LIST]({commit, state}) {
      if (!state.partnersList || state.partnersList.length === 0) {
        $api.partners.partnersList().then(result => {
          commit(partnersMts.PARTNERS_LIST, result.data);
        });
      }
    }
  }
}

我试图用 async/await 重写它,我试过这个:

export function InitActions($api) {
  return {
    async [partnersMts.PARTNERS_LIST]({commit, state}) {
      if (!state.partnersList || state.partnersList.length === 0) {
        await $api.partners.partnersList()
        commit(partnersMts.PARTNERS_LIST, result.data);
      }
    },
   }
}

但是我收到一个错误:Uncaught (in promise) ReferenceError: result is not defined 在上面的提交行上,这表明代码没有等待调用完成,我在这里写错了什么?

标签: javascriptvue.jsvuejs2vuex

解决方案


You need to store the result of the await into the result variable:

const result = await $api.partners.partnersList()
commit(partnersMts.PARTNERS_LIST, result.data)

推荐阅读