Javascript 在Vuejs中尝试使用异步/等待捕获
我正在使用VueJS/Nuxt和Vuex存储,并且定义了以下方法:Javascript 在Vuejs中尝试使用异步/等待捕获,javascript,vue.js,vuejs2,nuxt.js,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' }) } } 问题是我尚未创建
async UpdateData () {
try {
await this.$store.dispatch('updateMyData', this.data)
successMsg({ message: 'Data updated successfully' })
} catch (e) {
errorMsg({ message: 'Some error' })
}
}
问题是我尚未创建操作“updateMyData”,因此在控制台中我看到错误“[vuex]未知操作类型:updateMyData”
但是,仍然会执行successsg,我会收到消息“数据更新成功”
我的假设是如果等待。。。如果失败,它将转到捕捉块
你能帮我解释一下我的代码有什么问题,以及我如何纠正它吗。该错误不是一个实际的承诺错误,它是Vuex发出的警告,表示“updateMyData”操作尚未在Vuex存储中的任何位置注册。该消息来自一个简单的控制台。log/error/warn而不是抛出或拒绝,这就是为什么它不会在您的函数中失败。该错误不是实际的promise错误,它是Vuex发出的警告,表示“updateMyData”操作尚未在Vuex存储中的任何位置注册。消息来自一个简单的console.log/error/warn,而不是throw或reject,这就是为什么它不会在这里的函数中失败。如果等待表达式没有返回承诺对象,它会将传入的内容转换为已解析的承诺。这仅仅意味着您的未定义函数将立即返回,就像它已解析一样。因此,它不会拒绝,等待也不会抛出 如果wait运算符后面的表达式的值不是承诺,则它将转换为已解析的承诺
这来自于这里:在等待表达式不返回承诺对象的情况下,它将传入的内容转换为已解析的承诺。这仅仅意味着您的未定义函数将立即返回,就像它已解析一样。因此,它不会拒绝,等待也不会抛出 如果wait运算符后面的表达式的值不是承诺,则它将转换为已解析的承诺
这来自这里:你熟悉承诺吗?wait/async基本上是一种使用承诺的新语法。如果这段代码的承诺版本没有失败,等待版本也不会失败。我没有太多使用承诺。但是看看上面,你为什么认为它没有捕捉到错误?@acdcjunior-你读过这个问题吗?也就是说,语句直接放在代码块下面。没有坏处。都是想帮忙。所以请支持我的答案——因为这毕竟是最好的答案——你熟悉承诺吗?wait/async基本上是一种使用承诺的新语法。如果这段代码的承诺版本没有失败,等待版本也不会失败。我没有太多使用承诺。但是看看上面,你为什么认为它没有捕捉到错误?@acdcjunior-你读过这个问题吗?也就是说,语句直接放在代码块下面。没有坏处。都是想帮忙。所以请投票给我的答案-因为这毕竟是最好的答案:-对-打问号的原因。金达罗的代码可能是正确的。我删除了它,因为它与问题没有直接关系。虽然dispatch通常会返回一个承诺,但当操作不存在时,它会返回undefined,只是测试了它。你一针见血,+1!右-问号的原因。金达罗的代码可能是正确的。我删除了它,因为它与问题没有直接关系。虽然dispatch通常会返回一个承诺,但当操作不存在时,它会返回undefined,只是测试了它。你一针见血,+1!这意味着,如果我创建了该操作,并且该操作由于某种原因返回错误,那么该错误将被捕获?我相信是这样,因为$dispatch函数正在返回该操作返回SSO的承诺,这意味着如果我创建了该操作,并且该操作由于某种原因返回错误,那么错误会被捕获吗?我相信是这样,因为$dispatch函数正在返回操作返回的承诺