什么是async异步函数?
简单来说 是一个函数,是一个异步编程解决方案,内部封装了generator函数,是一个语法糖,内部自带执行器,与await配合使用;异步编程,同步处理;
async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise
async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中
Generator函数
Generator函数是ES6提供的一种异步编程解决方案,可以简单的把Generator理解为一个状态机,封装了多个内部状态。执行Generator函数会返回一个迭代器对象,可以通过调用迭代器next依次遍历内部状态
特征:
1)function关键字与函数名之间有个星号
2)函数内部使用yield(一个yield表示一种状态,表示一个代码执行节点)
例如:
function* Generator(){
// 内部使用yield表示式
yield '我是第一个状态返回值 我被执行了';//返回值 对这个状态的描述
yield '2';
yield '3';
}
let res=Generator();//返回值 返回的是一个迭代器对象/generator对象
console.log(res.next()); //执行第一个状态
console.log(res.next()); //执行下一个状态
console.log(res.next()); //执行下一个状态
如果想要在第二个状态获取上一个状态的描述,则需要在执行上一个状态结束前传递参数
function* Generator(){
let res=yield getData();
console.log(res,'获取响应');
yield '结束了';
}
let res=Generator();//返回值 返回的是一个迭代器对象/generator对象
res.next();
async function getData(){
// 发起一个异步请求
let result= await axios.get('http://xxxxxx');
// 应该在第一个状态得异步请求中发起第二段程序/第二个状态得执行
// 上一个状态返回值作为下一个状态得入口
// 第一个状态得方法里面发起第二个状态得执行
res.next(result);
}