版权声明:转载需注明出处 https://blog.csdn.net/samfung09/article/details/82953243
generator函数
其实从我开始接触es6中的异步函数就是一直在用async await(这是es7的),所以generator基本没用过,不过作为曾经的异步解决方案还是用必要了解一下。
async函数
async函数顾名思义就是异步函数,可以理解为是generator的语法糖。现在应用中异步任务更多使用基于promise与async函数的解决方案。
async函数的几个特点
1、使用async关键字声明函数(如:async function fn(){}).
2、async函数默认返回一个已解决的promise对象,如果手动return其他值,函数会自动return Promise.resolve(其他值)
await
async await是天生一对,async函数中没有出现await那就跟普通函数没什么区别,而await也只能在async函数中使用。
await顾名思义“等待”,await命令后是一个promise对象,如果不是,会被转成一个resolve的promise对象。如果await后面的promise状态是reject的话会抛出异常,所以可以将await语句写在try catch里。
当async函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句,所以调用async函数虽然有等待, 但是并不会导致阻塞, 因为他内部的所有阻塞都封装在promise对象中异步执行.。
与promise方式的简单对比
function promiseFn(){
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('hello');
}, 2000)
})
}
//promise方式
promiseFn().then(re => {
console.log(re);
})
//async await方式
async function fn(){
let re = await promiseFn();
console.log(re);
}
fn();
console.log('world')