generator函数与async函数

版权声明:转载需注明出处 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')

参考文章    参考文章

猜你喜欢

转载自blog.csdn.net/samfung09/article/details/82953243