大纲
什么是同步
需要设置同步吗?
什么是异步
异步不按照代码顺序执行,异步的执行效率更高。不能直接拿到结果。
异步程序的顺序是什么?
异步在什么时候会使用
什么是回调
- 回调函数是一个作为参数传给另一个JavaScript 函数的函数, 这个回调函数会在传给的函数内部执行。(例如下图的f1函数作为参数传给了f2,然后f2中再调用f1这个参数)
image.png
- 如果f2没有调用f1呢?(如果没有调用,那么就没有必要把函数作为参数啊。回调函数的最终目的就是调用它)
- 如果传给f2的参数不是函数呢(会报错,提示参数不是函数)
回调有什么缺点?
-
不够规范
- 不同程序员名称不一样,比如有的叫做fail,有的叫做error
-
容易造成回调地狱
Image.png
- 很难进行错误处理
如何判断是同步还是异步
查看一个函数的返回值处于下面各种函数之内,就是异步函数
setTimeoutAjaxAddEventListener
摇色子,如何得到异步的结果
- 用回调函数
image.png
如果异步任务有两个结果如何操作
方法一:回调接受两个参数
image.png
方法二:放入两个回调
一个对象中两个key
image.png
直接放入两个回调函数
image.png
用回调函数封装Ajax
image.png
什么是Promise?
简单说就是一个容器,里面保存着某个未来才会结束的事件
**
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。
**
promise.then(function(value) {
// success
}, function(error) {
// failure
});
如何用Promise封装Ajax呢?
-
任务成功调用resolve函数
- resolve会调用then后面的第一个参数
-
任务失败调用reject函数
- reject会调用then后面的第二个参数
image.png
上面这样封装ajax的缺点
- post无法上传数据(因为我在
request.sent()中没有写入具体的内容) - 不能设置请求头
request.setRequestHeader(key, value)
如何解决这个问题呢?
- 使用jQuery.ajax(不推荐)
- 使用axios
为什么推荐使用axios?
-
支持更多形式的参数
-
支持Promise
-
支持的更多的功能
如何学习axios
- 写博客介绍
- 通过项目学习
axios的高级用法
-
JSON自动处理
- 如果发现响应的
Content-Type是json - 就会自动调用
JSON.parse - 所以需要正确设置
Content-type
- 如果发现响应的
-
请求拦截器
- 比如加查询参数
-
响应拦截器
- 在响应中加些东西,甚至改内容
-
可以生成不同实例(对象)
- 不同的实例可以设置不同的配置,用于复杂场景
如何使用axios
- 在BootCdn里面找到
- 放置到script中
- 然后在自己的js文件中就可以使用了(注意要放置在axios的下面)
- 发出去了,看下面的xxx