尝试在Vuejs中使用async / await

时间:2018-03-10 04:23:39

标签: javascript vue.js vuejs2 nuxt.js

我正在使用VueJS / Nuxt和Vuex商店,我定义了以下方法:

async UpdateData () {
  try {
    await this.$store.dispatch('updateMyData', this.data)
    successMsg({ message: 'Data updated successfully' })
  } catch (e) {
    errorMsg({ message: 'Some error' })
  }
}

问题是我还没有创建动作'updateMyData',所以在我的控制台中我看到错误'[vuex] unknown action type: updateMyData'

但是,successMsg()仍然执行,我收到消息'数据已成功更新'。

我的假设是,如果等待......失败,它将转到catch块。

请帮助我解决我的代码有什么问题以及如何纠正它。

2 个答案:

答案 0 :(得分:2)

该错误不是实际的承诺错误,这是来自Vuex的警告,说'updateMyData'操作尚未在Vuex商店中的任何位置注册。该消息来自一个简单的console.log(/ error / warn),而不是throwreject(),这就是为什么它在你的函数中没有失败的原因。

答案 1 :(得分:1)

如果await表达式没有返回Promise对象,它会将传入的内容转换为“已解析的promise”。这只是意味着您的未定义函数会立即返回,就像它已解决一样。因此,它不会拒绝而await不会抛出。

  

如果await运算符后面的表达式的值不是Promise,则将其转换为已解析的Promise。

这来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#Description