async/await:
作用:解决回调地狱的;
promise解决的不够彻底,async/await:号称 回调地狱的终极解决方案
语法:
async和await是es7提供的两个关键字
async是用在函数定义之前的,用来修饰函数定义的 - 被修饰之后的函数,使用方式跟原来是一样的
async修饰的函数,在调用后,会得到一个promise对象,如果要得到去中返回的值,需要调用promise对象的then方法
await关键字必须使用在async修饰的函数中,如果不在async修饰的函数中,会报错
await所在作用域所属的函数,必须是async关键字修饰过的关键字
await的作用,是在后面等待一个值或promise对象
await等待的promise对象中的异步代码执行结束后,才会继续向下执行
await可以将promise中resolve的参数接收到以后,继续向下执行 - 异步代码变的跟同步一样了
被async修饰的函数,如果其中有await关键字,这个函数就成了异步函数了
如果async修饰的函数中没有await关键字, 跟普通函数一样,就是同步函数
async function fn(a, b){
return a + b
// 先return new Promise(function(resolve){
// resolve(a + b)
// })
}
var res = fn(1, 2) // 会得到promise对象
// console.log(res);
res.then(res => { // 原先函数中返回的结果,需要调用then方法得到
console.log(res);
})
用async和await处理回调地狱
async function fn(){
// 发送第一个请求
var res1 = await ajaxPromise({
url: 'http://localhost:8888/test/first',
dataType: 'text'
})
console.log(1, res1);
// 发送第2个请求
var res2 = await ajaxPromise({
url: 'http://localhost:8888/test/second'
})
console.log(2, res2);
// 发送第3个请求
var res3 = await ajaxPromise({
url: 'http://localhost:8888/test/third',
data: {
name: '张三',
age: 12
}
})
console.log(3, res3);
var a = await 3
console.log(a);
console.log(3);
}
解决延时器发送ajax请求
setTimeout(async a => {
var res = await ajaxPromise({
url: 'http://localhost:8888/test/second'
})
console.log(res);
}, 3000)