首页 > 其他分享 >vue3 Promise处理异步操作的对象

vue3 Promise处理异步操作的对象

时间:2024-07-21 16:11:04浏览次数:8  
标签:异步 loading const vue3 Promise error 操作

Promise 是 JavaScript 中用于处理异步操作的一种对象。它代表了一个异步操作的最终完成(或失败)及其结果值。在处理异步操作时,Promise 提供了一种更干净、更可读的方式来管理回调函数。

Promise 的状态

一个 Promise 对象有三种状态:

  1. Pending(进行中):初始状态,操作尚未完成。
  2. Fulfilled(已成功):操作成功完成,并返回一个结果值。
  3. Rejected(已失败):操作失败,并返回一个原因(错误)。

使用 Promise 的示例

下面是一个创建并使用 Promise 的简单示例:

// 创建一个 Promise
const myPromise = new Promise((resolve, reject) => {
  // 异步操作
  setTimeout(() => {
    const success = true; // 模拟异步操作结果
    if (success) {
      resolve('操作成功'); // 操作成功,调用 resolve
    } else {
      reject('操作失败'); // 操作失败,调用 reject
    }
  }, 2000);
});

// 使用 Promise
myPromise
  .then(result => {
    console.log(result); // 操作成功时输出:操作成功
  })
  .catch(error => {
    console.error(error); // 操作失败时输出:操作失败
  })
  .finally(() => {
    console.log('操作完成'); // 无论成功还是失败,都会执行
  });

在 Vue 3 组件中使用 Promise

以下是一个在 Vue 3 组件中使用 Promise 的示例,展示了如何处理异步数据获取:

<template>
  <div>
    <p v-if="loading">加载中...</p>
    <p v-else-if="error">{{ error }}</p>
    <ul v-else>
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const items = ref([]);
    const loading = ref(true);
    const error = ref(null);

    const fetchItems = () => {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          // 模拟异步操作
          const success = true; // 模拟操作结果
          if (success) {
            resolve([
              { id: 1, name: 'Item 1' },
              { id: 2, name: 'Item 2' },
            ]); // 操作成功,返回数据
          } else {
            reject('数据获取失败'); // 操作失败,返回错误信息
          }
        }, 2000);
      });
    };

    onMounted(() => {
      fetchItems()
        .then(data => {
          items.value = data; // 成功获取数据
        })
        .catch(err => {
          error.value = err; // 捕获并设置错误信息
        })
        .finally(() => {
          loading.value = false; // 操作完成,更新加载状态
        });
    });

    return {
      items,
      loading,
      error,
    };
  },
};
</script>

<style>
/* 在这里添加你的样式 */
</style>

解释

  1. 响应式数据:

    • itemsloadingerror 是通过 ref 创建的响应式引用。items 存储获取的数据,loading 表示加载状态,error 存储可能的错误信息。
  2. fetchItems 函数:

    • fetchItems 函数返回一个新的 Promise,模拟一个异步数据获取操作。根据 success 变量的值,调用 resolve 返回数据或调用 reject 返回错误信息。
  3. 使用 Promise:

    • 在组件挂载时,通过 onMounted 钩子调用 fetchItems 函数。
    • 使用 then 处理成功结果,将数据赋值给 items
    • 使用 catch 处理错误,将错误信息赋值给 error
    • 使用 finally 确保在操作完成后,无论成功还是失败,都将 loading 设置为 false

这种方式清晰地展示了如何在 Vue 3 组件中使用 Promise 来处理异步操作,并在视图中反映这些操作的状态。

标签:异步,loading,const,vue3,Promise,error,操作
From: https://www.cnblogs.com/beichengshiqiao/p/18314570

相关文章

  • vue3 await
    在JavaScript中,await是一个用于处理异步操作的关键字。它只能在async函数内部使用,并且用于等待一个Promise对象的解析。在Vue3中,await关键字常用于在组合式API的setup函数中处理异步操作,比如数据获取。使用await的示例以下是一个使用await关键字的简单示例,它......
  • vue3 async 关键字
    async关键字用于声明一个异步函数,这个函数会返回一个Promise对象。与await关键字配合使用时,可以在异步函数中暂停代码执行,直到Promise解决或拒绝,从而使异步代码的处理更简单和同步化。使用async的示例下面是一个完整的Vue3组件示例,展示了如何使用async和await来......
  • vue3 onMounted是一个生命周期钩子函数
    onMounted是一个生命周期钩子函数,在组件挂载到DOM后运行。在这里你可以执行需要在组件可用后进行的操作,比如获取数据、设置订阅或初始化第三方库。使用示例:import{onMounted}from'vue';onMounted(()=>{//组件挂载后执行的代码console.log('组件已挂载!');......
  • 超详细Python教程——异步任务和定时任务
    异步任务和定时任务在Web应用中,如果一个请求执行了耗时间的操作或者该请求的执行时间无法确定,而且对于用户来说只需要知道服务器接收了他的请求,并不需要马上得到请求的执行结果,这样的操作我们就应该对其进行异步化处理。如果说使用缓存是优化网站性能的第一要义,那么将耗时......
  • UART协议详解:异步串行通信的原理与应用
    UART(UniversalAsynchronousReceiver/Transmitter)协议是一种用于异步串行通信的标准,允许数据在两个设备之间通过串行总线进行双向传输。UART的设计目的是将并行数据转换为串行格式,以便通过一对导线(或无线链路)进行传输,然后再在接收端将串行数据转换回并行格式。UART的关键......
  • vue3 - 最新详细实现 “拖曳式课程表“ 日历课程排班功能,用鼠标拖拽课程放到日历课表
    效果图在vue3、nuxt3项目开发中,详解实现用鼠标拖拽排课的日历课程表,拖动课程名(学科)到日历课程表的某一节课中,拖放到课表上的时候自动沿边吸附贴合,vue3可视化拖拽生成课程表插件,左边是科目课程、右边是教学周课表,鼠标拖动把课程放到指定的日期时间上即可快速生成课表,数据......
  • Java中的异步编程与CompletableFuture应用
    Java中的异步编程与CompletableFuture应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代Java编程中,异步编程变得越来越重要,它可以帮助我们提高应用程序的响应速度和性能。CompletableFuture是Java8引入的一个强大工具,它简化了异步编程,使得......
  • 使用 useLazyFetch 进行异步数据获取
    title:使用useLazyFetch进行异步数据获取date:2024/7/20updated:2024/7/20author:cmdragonexcerpt:摘要:“使用useLazyFetch进行异步数据获取”介绍了在Nuxt开发中利用useLazyFetch进行异步数据加载的方法,强调其立即触发导航特性,与useFetch相似的使用方式,以及如何......
  • vue3 - 最新详细实现 “日历课程表“ 上课时间表功能组件,教务系统专用老师排课表插件
    效果图在vue3、nuxt3项目开发中,详解实现学生每周“动态课程表(日历表展现)”功能实现,对学期的每周课程进行排课和准备工作,可自由切换本月的每周上课表情况、也可通过日期范围选择器进行筛选指定周的教学排班表、相同的课成可以合并(可不开启),课表数据结构支持调用后端服......
  • 【Django+Vue3 线上教育平台项目实战】购物车与订单模块的精简实现与数据安全策略
    文章目录前言一、购物车模块1.后端核心逻辑2.前端页面代码3.操作流程及演示二、订单模块1.订单模块模型类设计1.展示订单信息a.页面展示b.前端核心代码c.后端核心逻辑2.订单是否使用优惠券与积分a.页面展示b.前端核心代码3.订单支付方式a.页面展示b.前端核心代码4.......