ES6的async函数

在都这篇文章之前应该已经具备Generator函数的相关知识,其实async就是generator函数的语法糖,语法和写法都变得更加简单。

//generator函数
function* aa(){
	yield '1';
	yield '2';
	return '3';
}
//aa函数使用时需要使用next()函数执行,每使用一次next()就会执行到下一个yield
//返回值是一个简单值
//async函数
async function bb(){
	await 'ha';
	await 'bb';
	return 'cc';
}
//bb函数会自执行结束,返回值是一个promise对象
相比generator函数有哪些优点:
  • 内置执行器
  • 更好的语义
  • 更广的适用性:co模块(自动执行器模块)约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolved 的 Promise 对象)
  • 返回值是promise对象:async函数内部return语句返回的值,会成为then方法回调函数的参数。
错误处理
  • async函数内部发生错误,会导致promise状态变为reject,会被catch捕捉到。
  • 当有两个await时,当第一个出了错误,那么第二个就不会被执行,此时处理办法就是可以将第一个await函数放入try...catch函数中,这样不挂第一个是否成功,第二个都会被执行;第二种解决办法就是第一个promise对象后面再跟一个catch方法
使用注意事项
  • await放入try...catch
  • 多个await不存在继发关系,最后同时触发,会提高性能
  • await只能使用在async函数中

你可能感兴趣的:(面试,es6,async)