ajax实质是XMLHttpRequest(XHR)
anxios是封装的XHR+Promise
纯XHR
1 | const xhr=new XMLHttpRequest()//获取一个实例 |
查询参数(对应anxios中的params)
1.在open中地址自己加上查询参数
2.URLSearchParams方法
1 | const paramsObj=URLSearchParams({ |
模板字符串字符串进行拼接${queryString}
数据提交
请求头 设置Content-Type:application/json
请求体 携带JSON字符串
1 | xhr.setRequestHeader('Content-Type','application/json') //设置请求头 |
anxios
会将获得的json字符串转换成对象
Promise 用于存放异步操作的结果
1 | const p = new Promise((resolve,reject)=>{ |
Promise三种状态
pending待定状态 .catch已拒绝 .then已兑现
console.dir详细打印 (打印错误信息时)
同步与异步
回调函数地狱
回调函数嵌套回调函数
可读性差,异常无法获取,耦合性差牵一发而动全身
解决方法:Promise链式调用
.then()方法会返回一个新生成的Promise对象
在.then内return一个new Promise((resolve,reject)=>{})
1 | const p = new Promise((resolve,reject)=>{ |
1 | axios({url: }).then(result=>{ |
async函数与await
以一种更简洁的方式写出基于Promise的异步行为,无需刻意地链式调用promise
这种时候使用try…catch方法捕获错误
调用栈:当前执行的代码
宿主环境:异步代码先放在宿主环境中(如计时2000ms)
任务队列:在宿主环境中完成异步操作后在任务队列中等待调用栈空闲时,队列中的任务进入调用栈运行
await后调用相当于在.then之后的语句,应当加入微任务队列
宏任务与微任务
宏任务:由浏览器环境执行的异步代码
例如:js执行脚本事件,setTimeout/setInterval。AJAX请求完成事件,用户交互事件等
微任务:由js引擎环境执行的异步代码(.then)
例如:Promise对象.then()的回调
优先调动微任务
Promise.all
合并多个promise对象,等待所有成功做后续逻辑
1 | //p自身也是个Promise对象,通过.then()获取结果 |