异步操作,promise、axios

一、异步操作(异步编程)、同步操作

异步操作是指在编程中,某个任务的执行不会立即完成,同时不会阻塞后续代码的执行。在异步操作中,程序可以继续运行,并在异步任务完成时得到通知并处理结果。这与同步操作相对,同步操作会阻塞程序的继续执行直到任务完成。

二、Promise

Promise 是 JavaScript es6 的一个特性,它允许你在异步操作(如网络请求)完成后执行某些代码。它代表了一个将来才会知道结果的操作。Promise 可以处于以下三种状态之一:

  • Pending(进行中):初始状态,既没有成功,也没有失败,也可以叫做等待态。

  • Fulfilled(已成功):操作成功完成。

  • Rejected(已失败):操作失败。

具体步骤

一、

复制代码
let promise = new Promise((resolve, reject) => {
  // 异步操作
  if (1、0) {
    resolve(value); // 成功时调用  为1的时候表示调用成功
  } else {
    reject(error); // 失败时调用   为0的时候表示失败调用
  }
});

二、使用 Promise

复制代码
promise.then(
  value => { /* 处理成功时的内容 */ },
  error => { /* 处理失败时的内容 */ }
);

三、catch():用于捕获 Promise 中发生的错误。

复制代码
promise.catch(
  error => { /*错误处理的内容 */ }
);

成功时用.then,失败处理则用.catch()

四、使用finally:不管是成功还是失败,都可以使用.finally()

复制代码
promise.finally(() => {
  // 写需要执行的代码内容。
});

总结一下:

举个小栗子:

创建一个请求id的函数,该函数返回一个promise,该promise在2秒后解决(成功),返回一个数字(也即指定商品列表的id)(提示:2秒后成功解决,请用setTimeout来模拟)

创建一个请求商品列表的函数,该函数接受一个id,该promise在3秒后解决(成功),返回一个商品列表,商品列表的数据如下

数据:

复制代码
const data = {
    code:0,
    data:[
  { goodsName: '袜子', price: 20 },
  { goodsName: 'T恤', price: 25 },
  { goodsName: '牛仔裤', price: 50 },
  { goodsName: '连衣裙', price: 70 },
  { goodsName: '运动鞋', price: 80 },
  { goodsName: '夹克', price: 120 },
  { goodsName: '帽子', price: 15 },
  { goodsName: '围巾', price: 30 },
  { goodsName: '手套', price: 18 },
  { goodsName: '裙子', price: 60 },
  { goodsName: '卫衣', price: 90 },
],
}

解题代码:

复制代码
<template>
</template>

<script setup>
import { ref } from 'vue';
const data = ref('[]')
const getid = () => {
  return new Promise((resolve, project) => {
    setTimeout(() => {
      resolve(2)
    }, 3000)
  })
};

const getlist = (id) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve([{
        code: 0,
        data: [
          { goodsName: '袜子', price: 20 },
          { goodsName: 'T恤', price: 25 },
          { goodsName: '牛仔裤', price: 50 },
          { goodsName: '连衣裙', price: 70 },
          { goodsName: '运动鞋', price: 80 },
          { goodsName: '夹克', price: 120 },
          { goodsName: '帽子', price: 15 },
          { goodsName: '围巾', price: 30 },
          { goodsName: '手套', price: 18 },
          { goodsName: '裙子', price: 60 },
          { goodsName: '卫衣', price: 90 },
        ]
      }]);
    }, 3000);
  });
};
//开始使用getid()函数
getid().then((id) => {
  console.log('成功2' + '+', id);
  return getlist();
}).then((res) => {
  const data = res[0]
  console.log('成功3' + JSON.stringify(data));
})
</script>

<style scoped></style>
相关推荐
2501_943782355 分钟前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统
2zcode13 分钟前
免费开源项目文档:基于MATLAB图像处理的药片检测与计数系统设计与实现
开发语言·图像处理·matlab
GV191rLvq20 分钟前
基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
服务器·前端·asp.net
吠品26 分钟前
LangChain 里 tool_call_id 为空?一次 MCP 工具集成的排查记录
前端
charlie11451419127 分钟前
Cinux: 加载第一个内核:从 bootloader 跳进 C++
linux·开发语言·c++·嵌入式
柒和远方1 小时前
Phase 7.4 学习博客:为什么多 API 项目需要 Swagger / OpenAPI
前端·后端·架构
张龙6871 小时前
拼多多开放平台对接踩坑实录:从 CLIENT_ID 配置到 MD5 签名算法的完整填坑指南
前端
GuWenyue1 小时前
提示词彻底过时?一套上下文工程方案,3步让LLM落地生产,代码直接复用
前端·javascript·人工智能
. . . . .1 小时前
Egg框架深入
java·开发语言
柒和远方1 小时前
Phase 7.3 复盘:后台任务不只是“扔进队列”,还要能被看见
前端·后端·架构