当前位置:   article > 正文

AJAX学习日记——Day 4

AJAX学习日记——Day 4

一、宏任务和微任务

        1、定义

  1. 1、定义
  2. 宏任务:由浏览器环境执行的异步代码
  3. 微任务:由JS引擎环境执行的异步代码
  4. 2、宏任务:
  5. JS脚本执行事件
  6. setTimeout
  7. AJAX请求完成事件
  8. 用户交互事件
  9. 3、微任务:
  10. Promise代码
  11. *Promise本身是同步的,而then和catch是异步的*

        2、概念:

  1. 1、概念:
  2. 当任务队列中同时又宏任务和微任务时,会优先执行微任务

二、Promise.all静态方法

        1、定义

  1. 1、定义
  2. 将多个小的Promise对象合并成大的Promise对象
  3. 当所有Promise对象成功时,才执行.then,否则执行catch

        2、语法

  1. 2、语法
  2. const p = Promise.all([Promise_one,Promise_two])
  3. p.then(result =>{
  4. }).catch(erro =>{
  5. })

        3、示例

  1. 3、示例
  2. const bjPromise = axios({
  3. url:'http://hmajax.itheima.net/api/weather',
  4. params:{
  5. city:'110100'
  6. }
  7. })
  8. const shPromise = axios({
  9. url:'http://hmajax.itheima.net/api/weather',
  10. params:{
  11. city:'310100'
  12. }
  13. })
  14. const gzPromise = axios({
  15. url:'http://hmajax.itheima.net/api/weather',
  16. params:{
  17. city:'440100'
  18. }
  19. })
  20. const szPromise = axios({
  21. url:'http://hmajax.itheima.net/api/weather',
  22. params:{
  23. city:'440300'
  24. }
  25. })
  26. const p =Promise.all([bjPromise,shPromise,gzPromise,szPromise])
  27. p.then(result => {
  28. console.log(result);
  29. }).catch(error=>{
  30. console.log(error);
  31. })

三、综合案例——商城

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>案例_分类导航</title>
  8. <link rel="stylesheet" href="./css/index.css">
  9. </head>
  10. <body>
  11. <!-- 大容器 -->
  12. <div class="container">
  13. <div class="sub-list">
  14. <div class="item">
  15. <h3>分类名字</h3>
  16. <ul>
  17. <li>
  18. <a href="javascript:;">
  19. <img src="http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png" />
  20. <p>巧克力</p>
  21. </a>
  22. </li>
  23. <li>
  24. <a href="javascript:;">
  25. <img src="http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png" />
  26. <p>巧克力</p>
  27. </a>
  28. </li>
  29. <li>
  30. <a href="javascript:;">
  31. <img src="http://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png" />
  32. <p>巧克力</p>
  33. </a>
  34. </li>
  35. </ul>
  36. </div>
  37. </div>
  38. </div>
  39. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  40. <script>
  41. /**
  42. * 目标:把所有商品分类“同时”渲染到页面上
  43. * 1. 获取所有一级分类数据
  44. * 2. 遍历id,创建获取二级分类请求
  45. * 3. 合并所有二级分类Promise对象
  46. * 4. 等待同时成功后,渲染页面
  47. */
  48. axios({
  49. url:'http://hmajax.itheima.net/api/category/top',
  50. }).then(result => {
  51. const secPromiseList = result.data.data.map(item =>
  52. {
  53. return axios({
  54. url:'http://hmajax.itheima.net/api/category/sub',
  55. method:'get',
  56. params:{
  57. id:item.id,
  58. }
  59. })
  60. }
  61. )
  62. // console.log(secPromiseList);
  63. const p = Promise.all(secPromiseList)
  64. //所有的一起判断
  65. p.then(result => {
  66. console.log(result[0].data.data);
  67. const dataList = result.map(item => {
  68. const dataObj = item.data.data;
  69. return `
  70. <div class="item">
  71. <h3>${dataObj.name}</h3>
  72. <ul>
  73. ${
  74. //嵌套,用一层取二层
  75. dataObj.children.map(item => {
  76. return `
  77. <li>
  78. <a href="javascript:;">
  79. <img src="${item.picture}" />
  80. <p>${item.name}</p>
  81. </a>
  82. </li>
  83. `
  84. }).join('')
  85. }
  86. </ul>
  87. `
  88. }).join('')
  89. console.log(dataList);
  90. document.querySelector('ul').innerHTML = dataList;
  91. })
  92. // document.querySelector('ul').innerHTML = secPromiseList;
  93. })
  94. </script>
  95. </body>
  96. </html>

四、token令牌

        1、概念

  1. 1、访问权限的令牌,本质上是一串字符串
  2. 2、在正确登陆后返回,由后端签发并返回

        2、作用

1、判断是否有登陆状态,控制访问权限

        3、实现

  1. const token = localStorage.getItem('token');
  2. if(!token)
  3. {
  4. location.href = '../index.html';
  5. }

五、headers参数

  1. headers:{
  2. Authoriazation:`Bearer ${localStorage.getItem('token')}}`
  3. }

六、axios请求拦截器

        1、概念

  1. 1、发起请求前,触发的配置函数,对请求参数进行额外配置
  2. 2、当有公共配置和设置时,就统一设置在请求拦截器中

        2、语法

  1. axios.interceptors.request.use(function(config)
  2. {
  3. const token = location
  4. })

        3、示例

  1. axios.interceptors.request.use(function (config){
  2. //在发送请求之前在做的事情
  3. const token = localStorage.getItem('token')
  4. token && (config.headers.Authorization = `Bearer ${token}`)
  5. }),function (error){
  6. //对请求错误做些什么
  7. return Promise.reject(error)
  8. }

四、axios响应拦截器

        1、概念

1、响应回到then/catch之前,触发的拦截函数,对响应结果统一处理

        2、语法

  1. axios.interceptors.response.use(function(response){
  2. //2xx的状态码都会触发该函数
  3. //对响应数据做些什么
  4. return response;
  5. }),function (error){
  6. //2xx以外的状态码都会触发该函数
  7. //对响应错误做些什么,如:统一对401身份验证失败情况做出处理
  8. }

五、axios优化

        1、概念

1、利用响应拦截器,使result直接获取需要的值

        2、示例

  1. axios.interceptors.response.use(function(response){
  2. //2xx的状态码都会触发该函数
  3. //对响应数据做些什么
  4. const result = response.data
  5. return result;
  6. }),function (error){
  7. //2xx以外的状态码都会触发该函数
  8. //对响应错误做些什么,如:统一对401身份验证失败情况做出处理
  9. }
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号