@vue-composition/如何在 setup() 中使用异步方法 [英] @vue-composition / How can I use asynchronous methods in setup()

查看:185
本文介绍了@vue-composition/如何在 setup() 中使用异步方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<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>

错误:setup"必须返回Object"或Function",得到Promise"

ERROR: "setup" must return a "Object" or a "Function", got "Promise"

推荐答案

setup 函数必须是同步的 可以使用Suspenseasync.

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

An onMounted hook can be used with an async callback:

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

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

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

Or, it is always possible to call an asynchronous function without to await it:

SplashPage.init(2000, context.root.$router, "plan", "login")
  .catch(console.log);

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

In both cases, you'll have to take into account that the component will be rendered before the execution of the asynchronous function. A simple way to not display something that would depends on it is to use v-if in your template.

这篇关于@vue-composition/如何在 setup() 中使用异步方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆