(这个问题已经回答了 JavaScript,见下文,但这个问题是特定于 TypeScript 的,它的行为不同)
我正在尝试使用打字稿在 Vue3.0 中使用异步功能。
如果没有 异步,这段代码效果很好:
// file: components/HelloWorld.vue
<template>
<div class="hello">
<h1>{{ msg }}</h1>
</div>
</template>
<script lang="ts">
import {defineComponent} from 'vue'
export default defineComponent({
name: 'HelloWorld',
props: {
msg: String,
},
async setup() { // <-- this works without 'async'
const test = 'test'
// await doSomethingAsynchronous()
return {
test,
}
},
})
</script>
使用 async setup()
组件“HelloWorld”从页面中消失,Firefox 控制台告诉我
"Uncaught (in promise) TypeError: node is null (runtime-dom.esm-bundler.js)"
当我将 async setup()
更改为 setup()
时,代码可以工作,但是我将无法在设置函数中使用 async/await。
所以我的问题是:如何使用 Typescript 在 setup() 函数中使用 async/await?
编辑:
这个问题的答案: 为什么我在 Vue3 中使用 async setup() 时出现空白,这 表明 async setup()
确实适用于 JavaScript,所以我希望它也适用于 TypeScript。
原文由 Hendrik Jan 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试使用
onMounted
挂钩来操作异步调用:现场演示
但 最好的方法 是在子组件中使用
async setup
并在父组件中用Suspense
组件包装该组件:用户列表.vue
父组件: