异步
同步异步
- 同步:在同一时间段内,只能做一件事情
- 异步:在同一时间段内,可以同时做多件事情
javascript 是单线程语言,从头到尾,从左到右,有错误就停止运行。
Ajax
- 可以实现与服务器的异步通信
- 局部刷新页面
异步解决的发展
- 回调函数
- Promise(ES6)
- generator(ES6)
- async / await(ES7):异步终极解决方案
Promise
javascript
const p = new Promise((resolve, reject) => {
// 异步代码
$.ajax({
url: '/users',
success(msg) {
// 成功回调
resolve(msg)
},
})
})
// 成功执行
p.then((msg) => {
return new Promise((resolve, reject) => {
$.ajax({
url: '/users',
data: {
id: msg.id,
},
})
}).then((msg) => {})
})
// 失败执行
p.catch(() => {})
async/await
async:用于定义一个异步函数,异步函数的返回值是 Promise 对象
javascript
async function foo() {}
foo()
await:一般用于等待一个 Promise 对象,实际上就是等待一个异步处理结果
javascript
const p = new Promise((resolve, reject) => {
// 异步代码
resolve({ id: 1 })
})
async function foo() {
const msg = await p
console.log(msg) // {id:1}
}
foo()
axios
- 发起 get 请求:
js
axios.get(请求地址, { params: 参数 }).then(function (res) {})
- 发起 post 请求:
js
axios.post(请求地址, { data: 参数 }).then(function (res) {})
axios.post(请求地址, 参数).then(function (res) {})
- 综合方法:
js
axios({
method: 请求类型,
url: 请求地址,
params: get请求发送的数据,
data: post请求发送的数据,
})
.then(function (res) {})
.cache(function (error) {})
注意:res 不是服务器返回的原始数据,是 axios 加工之后的数据;res.data 是服务器返回的数据;