@vue-composition / 如何在 setup() 中使用异步方法

邵励治*_*邵励治 9 javascript web typescript vue.js vue-composition-api

<script lang="ts">
import { createComponent } from "@vue/composition-api";

import { SplashPage } from "../../lib/vue-viewmodels";

export default createComponent({
  async setup(props, context) {
    await SplashPage.init(2000, context.root.$router, "plan", "login");
  }
});
</script>
Run Code Online (Sandbox Code Playgroud)

错误:“设置”必须返回“对象”或“函数”,得到“承诺”

Pal*_*leo 8

setup函数必须是同步的, 可以async使用Suspense

如何避免使用异步设置(过时的答案)

一个onMounted钩可以与使用async回调:

import { onMounted } from "@vue/composition-api";

// …
export default createComponent({
  setup(props, context) {
    onMounted(async () => {
      await SplashPage.init(2000, context.root.$router, "plan", "login");
    )};
  }
});
Run Code Online (Sandbox Code Playgroud)

或者,始终可以调用异步函数而无需等待它:

SplashPage.init(2000, context.root.$router, "plan", "login")
  .catch(console.log);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都必须考虑到组件将在执行异步函数之前呈现。不显示依赖于它的东西的一种简单方法是v-if在您的模板中使用。

  • 不幸的是,该功能仅适用于 vue3,不适用于 vue2 组合 API (5认同)