ES6之async函数

Async函数是ES2017引入的,这一引入使得异步操做又更加方便了。其实async函数是generator的语法糖。只是把*号变成async,yield变成await。promise

Async函数返回一个promise对象,能够用then去添加回调函数,函数内部的return值,会成为then方法的回调参数:异步

async function fn() {async

return 'a';函数

}测试

fn().then(res => {cdn

console.log(res);//a对象

})ip

若是报错,会被promise的catch捕获。并且async函数返回的必定要内部全部await后面的promise对象执行完才会发生状态改变,除非遇到return或报错:generator

var pro1 = new Promise((resolve, reject) => {回调函数

setTimeout(() => {resolve('pro1')}, 1000);

})

var pro2 = new Promise((resolve, reject) => {

setTimeout(() => {resolve('pro2')}, 2000);

})

async function fn() {

let p1 = await pro1;

console.log(p1);//pro1

let p2 = await pro2;

console.log(p2);//pro2

return 'end';

}

fn().then(res => {

console.log(res);//end

})

会在pro1和pro2执行完毕以后输出end。能够随便测试一些报错,修改时间等去理解。

Await在正常状况下跟一个promise对象,若是不是,则直接返回该对象的结果,若是是thenable对象也等同于promise对象。若是await后面的promise对象有reject状态,则reject会被catch捕获,与return同样,直接终止async函数。若是不想中断,则须要把await放到try catch里面,或者后面的promise对象跟一个catch方法。

阮大神花了很长的篇幅去讲解了错误的处理和怎么处理两个独立的异步操做,我的以为能够去了解,可是会以为既然使用了async,最好是异步且有顺序关系的。若是不是这样的,那么能够直接普通方法执行。

以前也分享过async和await,这边仍是要提一嘴,async的效率会高于promise,async的耗时是最长那个的耗时,promise是全部的和。

关于async更多的一些内容仍是去看ECMAScript6入门,里面还有一些我的以为要了解可是不是特别重要的内容。

相关文章
相关标签/搜索