ajax day4

news2024/9/22 17:37:25

1、promise链式调用

/**
     * 目标:把回调函数嵌套代码,改成Promise链式调用结构
     * 需求:获取默认第一个省,第一个市,第一个地区并展示在下拉菜单中
    */
    let pname = ''
    axios({
      url: 'http://hmajax.itheima.net/api/province',
    }).then(result => {
      pname = result.data.list[0]
      document.querySelector('.province').innerHTML = pname
      // then方法返回一个promise对象 此对象调用then中的result为此处返回的结果
      return axios({ url: 'http://hmajax.itheima.net/api/city', params: { pname } })
    }).then(result => {
      const cname = result.data.list[0]
      document.querySelector('.city').innerHTML = cname
      return axios({ url: 'http://hmajax.itheima.net/api/area', params: { pname, cname } })
    }).then(result => {
      // 此处result为上面请求返回的promise对象
      console.log(result)
    })
    // let pname = ''
    // // 1. 得到-获取省份Promise对象
    // axios({url: 'http://hmajax.itheima.net/api/province'}).then(result => {
    //   pname = result.data.list[0]
    //   document.querySelector('.province').innerHTML = pname
    //   // 2. 得到-获取城市Promise对象
    //   return axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }})
    // }).then(result => {
    //   const cname = result.data.list[0]
    //   document.querySelector('.city').innerHTML = cname
    //   // 3. 得到-获取地区Promise对象
    //   return axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }})
    // }).then(result => {
    //   console.log(result)
    //   const areaName = result.data.list[0]
    //   document.querySelector('.area').innerHTML = areaName
    // })

2、事件循环请添加图片描述
异步代码交由指定的线程处理, 处理完毕后推入任务队列, 当主线程空闲时就会循环从任务队列中取出异步代码执行请添加图片描述
3、宏任务和微任务请添加图片描述
promise本身是同步的,而then和catch回调函数是异步的

请添加图片描述
例题:
请添加图片描述

答案:1 7 5 6 2 3 4
请添加图片描述
调用栈空闲时,优先清空微任务队列中的回调

4、promise.all 静态方法
什么时候使用:想合并多个promise对象,同时等待大家都成功的结果,然后做后续处理的场景
请添加图片描述
请添加图片描述

  <script>
    /**
     * 目标:掌握Promise的all方法作用,和使用场景
     * 业务:当我需要同一时间显示多个请求的结果时,就要把多请求合并
     * 例如:默认显示"北京", "上海", "广州", "深圳"的天气在首页查看
     * code:
     * 北京-110100
     * 上海-310100
     * 广州-440100
     * 深圳-440300
    */
    // 1. 请求城市天气,得到Promise对象
    const bjPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '110100' } })
    const shPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '310100' } })
    const gzPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440100' } })
    const szPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440300' } })

    // 2. 使用Promise.all,合并多个Promise对象
    const p = Promise.all([bjPromise, shPromise, gzPromise, szPromise])
    p.then(result => {
      // 注意:结果数组顺序和合并时顺序是一致
      console.log(result)
      const htmlStr = result.map(item => {
        return `<li>${item.data.data.area} --- ${item.data.data.weather}</li>`
      }).join('')
      document.querySelector('.my-ul').innerHTML = htmlStr
    }).catch(error => {
      console.dir(error)
    })
  </script>

5、axios返回的是一个promise对象,axios.then方法也返回一个新promise对象

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

    <script>
        const p = axios({
            url: 'http://hmajax.itheima.net/api/weather',
            params: { city: '110100' }
        })
        console.log(typeof p)
        const p2 = p.then(result => {
            console.log(result)
        })
        console.log(p2 === p)
        console.log(typeof p === typeof p2)
    </script>

在这里插入图片描述
6、案例:
需求:同时展示数据

返回的是一个个promise对象组成的数组请添加图片描述
${}中放一个表达式,map函数调用也是一个表达式
在模板字符串中如何体现循环操作

<script>
    //一级 二级 及所有商品要一起展示
    axios({
      url: 'http://hmajax.itheima.net/api/category/top'
    }).then(result => {
      // console.log(result)
      const arr = result.data.data
      const pArr = arr.map(item => {
        return axios({
          url: 'http://hmajax.itheima.net/api/category/sub',
          params: {
            id: item.id
          }
        })
      })
      //返回一个promise对象组成的数组

      const p = Promise.all(pArr)
      p.then(result => {
        // console.log(result)

        document.querySelector('.sub-list').innerHTML = result.map(item => {
          const itemData = item.data.data
          const children = itemData.children
          // console.log(children)
          return `
          <div class="item">
        <h3>${itemData.name}</h3>
        <ul>
          ${children.map(item => {
            return `<li>
            <a href="javascript:;">
              <img src=${item.picture}>
              <p>${item.name}</p>
            </a>
          </li>`
          }).join('')
            }
        </ul>
      </div>`
        }).join('')
      })
    })
    // /**
    //  * 目标:把所有商品分类“同时”渲染到页面上
    //  *  1. 获取所有一级分类数据
    //  *  2. 遍历id,创建获取二级分类请求
    //  *  3. 合并所有二级分类Promise对象
    //  *  4. 等待同时成功后,渲染页面
    // */
    // // 1. 获取所有一级分类数据
    // axios({
    //   url: 'http://hmajax.itheima.net/api/category/top'
    // }).then(result => {
    //   console.log(result)
    //   // 2. 遍历id,创建获取二级分类请求
    //   const secPromiseList = result.data.data.map(item => {
    //     return axios({
    //       url: 'http://hmajax.itheima.net/api/category/sub',
    //       params: {
    //         id: item.id // 一级分类id
    //       }
    //     })
    //   })
    //   console.log(secPromiseList) // [二级分类请求Promise对象,二级分类请求Promise对象,...]
    //   // 3. 合并所有二级分类Promise对象
    //   const p = Promise.all(secPromiseList)
    //   p.then(result => {
    //     console.log(result)
    //     // 4. 等待同时成功后,渲染页面
    //     const htmlStr = result.map(item => {
    //       const dataObj = item.data.data // 取出关键数据对象
    //       return `<div class="item">
    //     <h3>${dataObj.name}</h3>
    //     <ul>
    //       ${dataObj.children.map(item => {
    //         return `<li>
    //         <a href="javascript:;">
    //           <img src="${item.picture}">
    //           <p>${item.name}</p>
    //         </a>
    //       </li>`
    //       }).join('')}
    //     </ul>
    //   </div>`
    //     }).join('')
    //     console.log(htmlStr)
    //     document.querySelector('.sub-list').innerHTML = htmlStr
    //   })
    // })

  </script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

徐亦达机器学习:Kalman Filter 卡尔曼滤波笔记 (一)

P ( x t P(x_t P(xt​| x t − 1 ) x_{t-1}) xt−1​) P ( y t P(y_t P(yt​| x t ) x_t) xt​) P ( x 1 ) P(x_1) P(x1​)Discrete State DM A X t − 1 , X t A_{X_{t-1},X_t} AXt−1​,Xt​​Any π \pi πLinear Gassian Kalman DM N ( A X t − 1 B , Q ) N(AX_{t-1}B,Q)…

open-interpreter +GTX1080+wxbot+codellama

https://github.com/KillianLucas/open-interpreter/ Open Interpreter&#xff08;开放解释器&#xff09; 可以让大语言模型&#xff08;LLMs&#xff09;在本地运行代码&#xff08;比如 Python、JavaScript、Shell 等&#xff09;。安装后&#xff0c;在终端上运行 $ inte…

窄边极简折叠玻璃门,实现自由推拉及折叠,遥控随意切换透明与磨砂效果

窄边极简折叠玻璃门是一种非常实用和创新的门设计&#xff0c;可以提供各种功能和效果。以下是一些关于窄边极简折叠玻璃门的相关技巧和应用&#xff1a; 1. 自由推拉和折叠&#xff1a;这种门设计允许你自由地推拉和折叠门&#xff0c;根据需要调整门的宽度和开启面积。这使得…

数字人员工成企业得力助手,虚拟数字人为企业注入高科技基因

随着互联网和人工智能技术的快速发展&#xff0c;以“数字员工”为代表的数字生产力&#xff0c;正在出现在各行各业的业务场景中。数字人员工的出现不是替代人类&#xff0c;而是通过技术提高工作效率&#xff0c;实现更加智能化的服务体验&#xff0c;帮助企业实现大规模自动…

C语言--字符串旋转笔试题

C语言–字符串旋转笔试题 文章目录 C语言--字符串旋转笔试题一、字符串左旋1.1 思路11.2 思路1代码1.3 思路21.4 思路2代码 二、字符串旋转结果判断2.1 思路12.2 思路2 一、字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字…

Truenas scale 配置Zerotier

Zerotier 注册 官网注册 zerotier&#xff0c; Truenas 安装 Zerotier Truenas的 APP -> Available Applications 中搜索 zerotier 在 Network中填入 zerotier 注册账户后给你的ID。 勾选 Host Network 在这里插入图片描述 Zerotier 中给定权限 左侧 框框 打钩&#…

Spring Boot集成Redis实现数据缓存

&#x1f33f;欢迎来到衍生星球的CSDN博文&#x1f33f; &#x1f341;本文主要学习Spring Boot集成Redis实现数据缓存 &#x1f341; &#x1f331;我是衍生星球&#xff0c;一个从事集成开发的打工人&#x1f331; ⭐️喜欢的朋友可以关注一下&#x1faf0;&#x1faf0;&…

MyEclipse 用tomcat部署SSM项目后,项目名称和当前项目不一致

MyEclipse 用tomcat部署SSM项目后&#xff0c;项目成功启动&#xff0c;但是访问所有接口报404 从这里可以看到&#xff0c;部署的项目名为accurate_sugar_control_yc_api&#xff0c;但实际我们项目名字应该为accurate_sugar_control_otc_api 解决办法 在本地找到项目的根目…

SAFe大规模敏捷认证SAFeScrumMaster Leading SAFe6.0官方双认证班,双证培训班

课程简介 根据最新的敏捷行业调研报告&#xff0c;敏捷的实施越来越广泛和深入&#xff0c;已经超越了选择几个试点团队进行敏捷尝试的阶段&#xff0c;大规模敏捷的实施已经成为企业敏捷转型的重中之重&#xff0c;因此作为Scrum Master仅仅了解单团队敏捷的运作是不够的&…

详解哈希,理解及应用

全文目录 概念哈希冲突及原因解决哈希冲突的方法闭散列线性探测二次探测扩容 开散列扩容 哈希的应用位图布隆过滤器 概念 通过映射关系将关键字映射到存储位置&#xff0c;并实现增删改查操作。 通过上面的方法构造出来的结构就叫哈希表&#xff08;散列表&#xff09;&#x…

基础算法---区间合并

直接上题目,不废话! 题目 给定 n 个区间 [l,r]&#xff0c;要求合并所有有交集的区间。 注意如果在端点处相交&#xff0c;也算有交集。 输出合并完成后的区间个数。 例如&#xff1a;[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式 第一行包含整数 n。 接下来 n 行&am…

Linux中如何执行命令

命令格式&#xff1a; 主命令 [选项...] [参数&#xff08;要操作的对象&#xff09;...] ——选项&#xff1a;决定了命令的执行方式 长选项 --version 短选项 -V&#xff0c;-i&#xff0c;-d &#xff0c;-r ——参数&#xff1a;决定命令的作用对象 不同的命令参数不同 …

天府新区直播产业成型,成都直播产业基地开园倒计时!

直播&#xff0c;正逐渐衍化为当今社会的基础媒介&#xff0c;直播行业以“平台经济”为依托&#xff0c;构筑了数字经济一大“动脉”。 天府新区&#xff0c;数字激潮涌。蜂巢产业&#xff0c;让未来生长。 站在电商直播的时代风口上&#xff0c;树莓集团携手上市公司德商产投…

如何高效且优雅地使用Redis

本文从如下7个维度&#xff0c;带你全面理解Redis的最佳实践和优化&#xff1a; 内存性能可靠性运维安全资源规划监控 1、如何节省内存 1.1、控制Key的长度 在开发业务时&#xff0c;要提前预估Redis中写入key的数量&#xff0c;如果key数量达到了百万级别&#xff0c;那过…

【SpringMVC】之自定义注解

文章目录 一、Java注解1.1 简介1.2 分类1.2.1 JDK基本注解1.2.2 JDK元注解1.3 自定义注解 二、使用自定义注解2.1 **案例一&#xff08;获取类与方法上的注解值&#xff09;**2.2 **案例二&#xff08;获取类属性上的注解属性值&#xff09;**2.3 **案例三&#xff08;获取参数…

easycms v5.5 分析 | Bugku S3 AWD排位赛

前言 这个awd打的悲&#xff0c;后台默认用户名密码为admin:admin&#xff0c;但是几乎所有人都改了 而且一进去看到这个cms就有点懵逼&#xff0c;都不知道这个cms是干嘛的&#xff08;没用过相似的cms&#xff09; 虽然网上找出了很多相关的漏洞&#xff0c;但是不知道为什…

API实战教程:使用身份证OCR识别API构建一个应用

1. 引言 你是否曾经想过&#xff0c;只需拍一张身份证的照片&#xff0c;就能自动读取上面的所有信息&#xff1f;今天&#xff0c;我们要介绍的就是这样一个神奇的工具&#xff1a;身份证OCR识别API。不管你是技术小白还是初学者&#xff0c;跟着我们的步骤&#xff0c;你都可…

揭秘弹幕游戏制作

最近好多人问弹幕游戏&#xff0c;甚至是招人的也要DOTS做弹幕游戏... 实际上目前的弹幕游戏绝大多数应该和DOTS没有半点关系&#xff0c;别忘了DOTS这项技术渲染问题还没能够被合理解决呢 所以目前用的全都是GPU Instance这项技术&#xff0c;于是乎我决定下场写这篇帖子&am…

【藏经阁一起读】(69)__《阿里云视频云产品手册2023版》

【藏经阁一起读】&#xff08;69&#xff09;__《阿里云视频云产品手册2023版》 目录 一、概述阿里云视频云全产品矩阵 二、数字人视频制作 以下是人工智能虚拟人物的一些优秀代表作品及其特点&#xff1a; 阿里云视频云数字人视频制作产品优势 ▶高还原度的拟真效果 ▶场…

网络安全(黑客技术)自学规划

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性…