async await是什么?
async
async函数的es7提出的让JavaScript对异步操作有一个终极操作,async是Generator函数的语法糖。而相比于Generator,async函数的改进有一下四点:
①内置执行器
Generator函数的执行必须依靠执行器,而aysnc函数自带执行器,调用方式和普通函数的调用是一样的。
②更加语义化
async和await相比较于*和yield更加语义化。
③更广的适用性
co模块约定,yield命令后面只能是Thunk函数或Promise对象。而async函数的await函数命令后面则可以是Promise或者原始类型的值(Number、string、boolean,等类型值可以用于同步操作)
④返回值是Promise
async函数返回值是Promise对象,比Generator返回的Iterator对象方便,可以直接使用then()方法进行调用
await
await意思是async wait(异步等待)。任何async函数都会默认返回promise,并且这个promise解析的值将会是这个函数的返回值,而async函数必须等到内部所有的await命令的promise对象执行完后,才会发生状态改变。
async await的作用
async函数完全可以看作是由多个异步操作包装成的一个Promise对象,可以使用then放回添加回调函数。当执行函数时,await命令就是内部then命令的语法糖,函数执行一碰到await时就会先返回,等到异步操作完成后,再接着执行函数体内后面的语句。
用法:
async function f() {
return await 1
};
f().then( (v) => console.log(v)) // 1