免费推广网站下载,搜索关键词的方法,搜索引擎推广有哪些,wordpress漂浮你可以的#xff0c;去飞吧#xff01; 同步代码和异步代码 回调函数地狱和 Promise 链式调用 
回调函数地狱 缔造“回调地狱”↓ 制造里层回调错误#xff0c;却在最外层接收错误→无法捕获 axios源码抛出异常#xff08;未捕获#xff09; !DOCTYPE html
ht… 
你可以的去飞吧 同步代码和异步代码 回调函数地狱和 Promise 链式调用 
回调函数地狱 缔造“回调地狱”↓ 制造里层回调错误却在最外层接收错误→无法捕获 axios源码抛出异常未捕获 !DOCTYPE html
html langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title回调地狱/title
/headbodyformspan省份/spanselectoption classprovince/option/selectspan城市/spanselectoption classcity/option/selectspan地区/spanselectoption classarea/option/select/formscript srchttps://cdn.jsdelivr.net/npm/axios/dist/axios.min.js/scriptscript/*** 目标演示回调函数地狱* 需求获取默认第一个省第一个市第一个地区并展示在下拉菜单中* 概念在回调函数中嵌套回调函数一直嵌套下去就形成了回调函数地狱* 缺点可读性差异常无法获取耦合性严重牵一发动全身*/// 1. 获取默认第一个省份的名字axios({url: http://hmajax.itheima.net/api/province}).then(result  {const pname  result.data.list[0]document.querySelector(.province).innerHTML  pname// 2. 获取默认第一个城市的名字axios({url: http://hmajax.itheima.net/api/city, params: { pname }}).then(result  {const cname  result.data.list[0]document.querySelector(.city).innerHTML  cname// 3. 获取默认第一个地区的名字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})})}).catch(error  {console.dir(error)})/script
/body/html 
总结 Promise - 链式调用 实操 
!DOCTYPE html
html langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0titlePromise_链式调用/title
/headbodyscript/*** 目标掌握Promise的链式调用* 需求把省市的嵌套结构改成链式调用的线性结构*/// 1. 创建Promise对象-模拟请求省份名字const p  new Promise((resolve, reject)  {setTimeout(()  {resolve(北京市)}, 2000)})// 2. 获取省份名字const p2  p.then(result  {console.log(result)// 3. 创建Promise对象-模拟请求城市名字// return Promise对象最终状态和结果影响到新的Promise对象return new Promise((resolve, reject)  {setTimeout(()  {resolve(result  --- 北京)}, 2000)})})// 4. 获取城市名字p2.then(result  {console.log(result)})// then()原地的结果是一个新的Promise对象console.log(p2  p)/script
/body/html 总结 async 和 await 使用 
使用方法 在async函数中使用await直接获取Promise对象成功状态的结果值 完整代码 
!DOCTYPE html
html langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0titleasync函数和await_解决回调函数地狱/title
/headbodyformspan省份/spanselectoption classprovince/option/selectspan城市/spanselectoption classcity/option/selectspan地区/spanselectoption classarea/option/select/formscript srchttps://cdn.jsdelivr.net/npm/axios/dist/axios.min.js/scriptscript/*** 目标掌握async和await语法解决回调函数地狱* 概念在async函数内使用await关键字获取Promise对象成功状态结果值* 注意await必须用在async修饰的函数内await会阻止异步函数内代码继续执行原地等待结果*/// 1. 定义async修饰函数async function getData() {// 2. await等待Promise对象成功的结果const pObj  await axios({url: http://hmajax.itheima.net/api/province})const pname  pObj.data.list[0]const cObj  await axios({url: http://hmajax.itheima.net/api/city, params: { pname }})const cname  cObj.data.list[0]const aObj  await axios({url: http://hmajax.itheima.net/api/area, params: { pname, cname }})const areaName  aObj.data.list[0]document.querySelector(.province).innerHTML  pnamedocument.querySelector(.city).innerHTML  cnamedocument.querySelector(.area).innerHTML  areaName}getData()/script
/body/html 
async函数和await_捕获错误 在area后面加了“1”用comsole.dir打印错误信息 
接口返回的真正的响应数据在错误对象该对象中有着axios处理过的提供的一些其他信息的response属性 还可以到网络里查看到 疑问省份和城市应该获取成功为什么没有展示 ——在try语句中如果某句代码发生错误后面的不会再执行。 
!DOCTYPE html
html langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0titleasync函数和await_错误捕获/title
/headbodyformspan省份/spanselectoption classprovince/option/selectspan城市/spanselectoption classcity/option/selectspan地区/spanselectoption classarea/option/select/formscript srchttps://cdn.jsdelivr.net/npm/axios/dist/axios.min.js/scriptscript/*** 目标async和await_错误捕获*/async function getData() {// 1. try包裹可能产生错误的代码try {const pObj  await axios({ url: http://hmajax.itheima.net/api/province })const pname  pObj.data.list[0]const cObj  await axios({ url: http://hmajax.itheima.net/api/city, params: { pname } })const cname  cObj.data.list[0]const aObj  await axios({ url: http://hmajax.itheima.net/api/area, params: { pname, cname } })const areaName  aObj.data.list[0]document.querySelector(.province).innerHTML  pnamedocument.querySelector(.city).innerHTML  cnamedocument.querySelector(.area).innerHTML  areaName} catch (error) {// 2. 接着调用catch块接收错误信息// 如果try里某行代码报错后try中剩余的代码不会执行了console.dir(error)}}getData()/script
/body/html 
事件循环-EventLoop 
事件循环 运行结果都是1 3 2 调用栈可以理解为 JS代码在运行时形成的调用环境 
宿主环境浏览器注意浏览器是多线程的JS是单线程的 
任务队列内存开辟的一块空间 代码及答案 
!DOCTYPE html
html langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title事件循环_练习/title
/headbodyscript/*** 目标阅读并回答执行的顺序结果*/console.log(1)setTimeout(()  {console.log(2)}, 0)function myFn() {console.log(3)}function ajaxFn() {const xhr  new XMLHttpRequest()xhr.open(GET, http://hmajax.itheima.net/api/province)xhr.addEventListener(loadend, ()  {console.log(4)})xhr.send()}for (let i  0; i  1; i) {console.log(5)}ajaxFn()document.addEventListener(click, ()  {console.log(6)})myFn()// 1 5 3 2 4 点击一次document就会执行一次打印6/script
/body/html 
宏任务与微任务 宏任务与微任务 - 执行顺序 什么是宏任务 
——交给浏览器管理和执行的异步代码 
什么是微任务在JS引擎中执行先与宏任务执行 
——JS引擎发起和管理执行的异步代码 经典面试题 !DOCTYPE html
html langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title事件循环经典_经典面试题/title
/headbodyscript// 目标回答代码执行顺序console.log(1)setTimeout(()  {console.log(2)const p  new Promise(resolve  resolve(3))p.then(result  console.log(result))}, 0)const p  new Promise(resolve  {setTimeout(()  {console.log(4)}, 0)resolve(5)})p.then(result  console.log(result))const p2  new Promise(resolve  resolve(6))p2.then(result  console.log(result))console.log(7)// 1 7 5 6 2 3 4/script/body/html 
Promise.all 静态方法 合并多个Promise对象 展出数据可使用低速网络查看是否同时展示 测试catch在weather后面加123 进catch不进then 案例 - 商品分类 !DOCTYPE html
html langenheadmeta charsetUTF-8 /meta http-equivX-UA-Compatible contentIEedge /meta nameviewport contentwidthdevice-width, initial-scale1.0 /title案例_分类导航/titlelink relstylesheet href./css/index.css
/headbody!-- 大容器 --div classcontainerdiv classsub-listdiv classitemh3分类名字/h3ullia hrefjavascript:;img srchttp://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png /p巧克力/p/a/lilia hrefjavascript:;img srchttp://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png /p巧克力/p/a/lilia hrefjavascript:;img srchttp://zhoushugang.gitee.io/erabbit-client-pc-static/uploads/img/category%20(9).png /p巧克力/p/a/li/ul/div/div/divscript srchttps://cdn.jsdelivr.net/npm/axios/dist/axios.min.js/scriptscript/*** 目标把所有商品分类“同时”渲染到页面上*  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 classitemh3${dataObj.name}/h3ul${dataObj.children.map(item  {return lia hrefjavascript:;img src${item.picture}p${item.name}/p/a/li}).join()}/ul/div}).join()console.log(htmlStr)document.querySelector(.sub-list).innerHTML  htmlStr})})/script
/body/html 
效果先是默认的HTML结构全部请求完成后才重新渲染展示如下 案例 - 学习反馈 样式结构 
!DOCTYPE html
html langzh-CNheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0!-- 初始化样式 --link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/reset.css2.0.2/reset.min.css!-- 引入bootstrap.css --link hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css relstylesheet!-- 核心样式 --link relstylesheet href./css/index.csstitle学习反馈/title
/headbodydiv classcontainerh4 classstu-title学习反馈/h4img classbg src./img/head.png altdiv classitem-wrapdiv classhot-areaspan classhot热门校区/spanul classnavlia target_blank hrefhttp://bjcp.itheima.com/北京/a /lilia target_blank hrefhttp://sh.itheima.com/上海/a /lilia target_blank hrefhttp://gz.itheima.com/广州/a /lilia target_blank hrefhttp://sz.itheima.com/深圳/a /li/ul/divform classinfo-formdiv classarea-boxspan classtitle地区选择/spanselect nameprovince classprovinceoption value省份/option/selectselect namecity classcityoption value城市/option/selectselect namearea classareaoption value地区/option/select/divdiv classarea-boxspan classtitle您的称呼/spaninput typetext namenickname classnickname  value播仔/divdiv classarea-boxspan classtitle宝贵建议/spantextarea typetext namefeedback classfeedback placeholder您对AJAX阶段课程宝贵的建议/textarea/divdiv classarea-boxbutton typebutton classbtn btn-secondary submit确定提交/button/div/form/div/divscript srchttps://cdn.bootcdn.net/ajax/libs/axios/1.2.0/axios.min.js/scriptscript src./js/form-serialize.js/script!-- 核心代码 --script src./js/index.js/script
/body/html 
功能核心JS代码 
/*** 目标1完成省市区下拉列表切换*  1.1 设置省份下拉菜单数据*  1.2 切换省份设置城市下拉菜单数据清空地区下拉菜单*  1.3 切换城市设置地区下拉菜单数据*/
// 1.1 设置省份下拉菜单数据
axios({url: http://hmajax.itheima.net/api/province
}).then(result  {const optionStr  result.data.list.map(pname  option value${pname}${pname}/option).join()document.querySelector(.province).innerHTML  option value省份/option  optionStr
})// 1.2 切换省份设置城市下拉菜单数据清空地区下拉菜单
document.querySelector(.province).addEventListener(change, async e  {// 获取用户选择省份名字// console.log(e.target.value)const result  await axios({ url: http://hmajax.itheima.net/api/city, params: { pname: e.target.value } })const optionStr  result.data.list.map(cname  option value${cname}${cname}/option).join()// 把默认城市选项下属城市数据插入select中document.querySelector(.city).innerHTML  option value城市/option  optionStr// 清空地区数据document.querySelector(.area).innerHTML  option value地区/option
})// 1.3 切换城市设置地区下拉菜单数据
document.querySelector(.city).addEventListener(change, async e  {console.log(e.target.value)const result  await axios({url: http://hmajax.itheima.net/api/area, params: {pname: document.querySelector(.province).value,cname: e.target.value}})console.log(result)const optionStr  result.data.list.map(aname  option value${aname}${aname}/option).join()console.log(optionStr)document.querySelector(.area).innerHTML  option value地区/option  optionStr
})/*** 目标2收集数据提交保存*  2.1 监听提交的点击事件*  2.2 依靠插件收集表单数据*  2.3 基于axios提交保存显示结果*/
// 2.1 监听提交的点击事件
document.querySelector(.submit).addEventListener(click, async ()  {// 2.2 依靠插件收集表单数据const form  document.querySelector(.info-form)const data  serialize(form, { hash: true, empty: true })console.log(data)// 2.3 基于axios提交保存显示结果try {const result  await axios({url: http://hmajax.itheima.net/api/feedback,method: POST,data})console.log(result)alert(result.data.message)} catch (error) {console.dir(error)alert(error.response.data.message)}
})效果  文章转载自: http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.jycr.cn.gov.cn.jycr.cn http://www.morning.hqrr.cn.gov.cn.hqrr.cn http://www.morning.lwmzp.cn.gov.cn.lwmzp.cn http://www.morning.ychoise.com.gov.cn.ychoise.com http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn http://www.morning.jsdntd.com.gov.cn.jsdntd.com http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.kyhnl.cn.gov.cn.kyhnl.cn http://www.morning.bmncq.cn.gov.cn.bmncq.cn http://www.morning.prgdy.cn.gov.cn.prgdy.cn http://www.morning.sxtdh.com.gov.cn.sxtdh.com http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn http://www.morning.zlzpz.cn.gov.cn.zlzpz.cn http://www.morning.djgrg.cn.gov.cn.djgrg.cn http://www.morning.qdrrh.cn.gov.cn.qdrrh.cn http://www.morning.npqps.cn.gov.cn.npqps.cn http://www.morning.rnqnp.cn.gov.cn.rnqnp.cn http://www.morning.ktnmg.cn.gov.cn.ktnmg.cn http://www.morning.mlnzx.cn.gov.cn.mlnzx.cn http://www.morning.yrpg.cn.gov.cn.yrpg.cn http://www.morning.sqhtg.cn.gov.cn.sqhtg.cn http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn http://www.morning.fnrkh.cn.gov.cn.fnrkh.cn http://www.morning.mqwdh.cn.gov.cn.mqwdh.cn http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn http://www.morning.gfqj.cn.gov.cn.gfqj.cn http://www.morning.lqqqh.cn.gov.cn.lqqqh.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.xjmyq.com.gov.cn.xjmyq.com http://www.morning.ttdxn.cn.gov.cn.ttdxn.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.hptbp.cn.gov.cn.hptbp.cn http://www.morning.nfks.cn.gov.cn.nfks.cn http://www.morning.ybhjs.cn.gov.cn.ybhjs.cn http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn http://www.morning.pwqyd.cn.gov.cn.pwqyd.cn http://www.morning.wjqyt.cn.gov.cn.wjqyt.cn http://www.morning.xbnkm.cn.gov.cn.xbnkm.cn http://www.morning.mjwnc.cn.gov.cn.mjwnc.cn http://www.morning.rryny.cn.gov.cn.rryny.cn http://www.morning.yfqhc.cn.gov.cn.yfqhc.cn http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn http://www.morning.czwed.com.gov.cn.czwed.com http://www.morning.rnkq.cn.gov.cn.rnkq.cn http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.jggr.cn.gov.cn.jggr.cn http://www.morning.ykmtz.cn.gov.cn.ykmtz.cn http://www.morning.qbdqc.cn.gov.cn.qbdqc.cn http://www.morning.qwrb.cn.gov.cn.qwrb.cn http://www.morning.nhzzn.cn.gov.cn.nhzzn.cn http://www.morning.dxsyp.cn.gov.cn.dxsyp.cn http://www.morning.rfzzw.com.gov.cn.rfzzw.com http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.dpnhs.cn.gov.cn.dpnhs.cn http://www.morning.ftwlay.cn.gov.cn.ftwlay.cn http://www.morning.rrcrs.cn.gov.cn.rrcrs.cn http://www.morning.dpppx.cn.gov.cn.dpppx.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn http://www.morning.ylqpp.cn.gov.cn.ylqpp.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn http://www.morning.rykx.cn.gov.cn.rykx.cn http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn http://www.morning.ltqzq.cn.gov.cn.ltqzq.cn http://www.morning.fldrg.cn.gov.cn.fldrg.cn http://www.morning.nqcwz.cn.gov.cn.nqcwz.cn http://www.morning.tldfp.cn.gov.cn.tldfp.cn http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn http://www.morning.jkcnq.cn.gov.cn.jkcnq.cn http://www.morning.jnbsx.cn.gov.cn.jnbsx.cn http://www.morning.nclps.cn.gov.cn.nclps.cn http://www.morning.fpqq.cn.gov.cn.fpqq.cn