当前位置: 首页 > article >正文

vue3 mounted 中调用 异步函数

在 Vue 3 中,如果你想要在 mounted 生命周期钩子中调用异步函数,你可以直接在 onMounted 钩子内部调用这个异步函数。通常情况下,你会希望处理异步操作的结果或错误,并确保在组件卸载时取消这些操作。下面是一个简单的例子,展示如何在 mounted 钩子中调用异步函数,并处理可能的结果或错误:

 import { onMounted, ref } from 'vue'

export default {
  setup() {
    const data = ref(null);
    const loading = ref(true);
    const error = ref(null);

    const fetchData = async () => {
      try {
        // 假设 fetchSomeData 是一个返回 Promise 的异步函数
        const response = await fetch('https://api.example.com/data');
        const result = await response.json();
        if (result) {
          data.value = result;
        }
      } catch (err) {
        error.value = err.message;
      } finally {
        loading.value = false;
      }
    };

    // 在组件挂载完成后执行
    onMounted(fetchData);

    return { data, loading, error };
  }
}

在这个例子中:

  • 我们定义了一个名为 fetchData 的异步函数来模拟数据请求。
  • onMounted 被用来确保在组件挂载后立即调用 fetchData。
  • 使用 try…catch…finally 结构来处理可能发生的错误,并且无论是否成功都会设置 loading 为 false。
  • data 和 error 变量会被更新以反映请求的状态。

如果你的异步操作需要取消机制,例如在组件卸载时取消一个正在进行的网络请求,你可以使用 AbortController。

下面是如何结合 AbortController 来取消请求的例子:

import { onMounted, onUnmounted, ref } from 'vue';

export default {
  setup() {
    const data = ref(null);
    const loading = ref(true);
    const error = ref(null);
    let abortController = null;

    const fetchData = async () => {
      abortController = new AbortController();
      try {
        const response = await fetch('https://api.example.com/data', { signal: abortController.signal });
        const result = await response.json();
        if (result) {
          data.value = result;
        }
      } catch (err) {
        if (!err.name.includes('AbortError')) {
          error.value = err.message;
        }
      } finally {
        loading.value = false;
      }
    };

    onMounted(fetchData);

    // 在组件卸载时取消请求
    onUnmounted(() => {
      if (abortController) {
        abortController.abort(); // 取消请求
      }
    });

    return { data, loading, error };
  }
}

在这个版本中,我们创建了一个 AbortController 实例,并将其信号传递给 fetch 请求。如果组件卸载,我们就调用 abort() 方法来取消请求。这样可以避免不必要的网络请求,并且可以提高应用的性能。


http://www.kler.cn/a/460591.html

相关文章:

  • 【Go】Go数据类型详解—函数
  • leetcode hot100 字符串解码
  • [python SQLAlchemy数据库操作入门]-17.使用 Flask-SQLAlchemy:构建股票数据 API
  • lua和C API库一些记录
  • 【Rust自学】8.5. HashMap Pt.1:HashMap的定义、创建、合并与访问
  • Java重要面试名词整理(十七):Nacos
  • 深入浅出梯度下降与反向传播
  • 如何在没有 iCloud 的情况下将联系人从 iPhone 传输到 iPhone
  • MySQL 中的触发器:优点和缺点
  • 使用交换机构建简单局域网
  • 九垠赢+商业管理系统 Common.ashx 文件上传致RCE漏洞复现
  • 复合机器人赋能食品饮料加工行业向自动化升级改造
  • OpenCV相机标定与3D重建(39)计算校正畸变后的新相机内参矩阵函数getOptimalNewCameraMatrix()的使用
  • 数据的高级处理——pandas模块进阶——数据的查找和替换
  • Linux ipmitool工具使用笔记
  • 输入ssh-add ~/.ssh/login ,显示Enter passphrase for /c/Users/.ssh/login:
  • UniApp 原生插件开发指南
  • C# OpenCV机器视觉:车牌识别
  • 基于深度学习的语音识别系统实现:开启语音交互的新时代
  • VScode 格式化代码空格记录