Generator函数与async函数对照
Generator函数:
Generator函数是ES2015供应的异步解决方案,与一般函数有很大的差别;
- 特性:
- 在function关键字背面跟一个(*)号;
- 在函数体内部运用yield表达式作为一个状况;
Generator函数返回一个遍历器,可经由过程for……of要领遍历每一个状况;
- 用法:
实行Generator并不马上实行,返回一个遍历器,遍历器经由过程挪用next()、throw()或许return()实行下一个状况、捕捉毛病或许完毕遍历器;
async函数:
async函数是ES2017供应的异步函数语法,是generator的语法糖,然则用法上与Generator函数照样有很大差别;
- 特性:
- 在function关键字前面跟一个async关键字;
- 在函数体内部运用await表达式;
async函数返回一个promise对象;
- 用法:
实行async函数会马上实行,和一般函数一样,然则返回一个promise对象;
二者对照:
- Generator 出现在ES2015中,async 出现在ES2017中,async 是 Generator 的语法糖;
- 实行体式格局差别,Generator 实行须要运用实行器(next()等要领);async 函数自带实行器,与一般函数的实行一样;
- async 的语法语义越发清晰,async 示意异步,await 示意守候;而 Generator 函数的(*)号和 yield 的语义就没那末直接了;
- Generator 中 yield 背面只能跟 Thunk 函数或 Promise 对象;而 async 函数中 await 背面可所以 promise 对象或许原始范例的值(会自动转为马上resovle的promise对象);
- 返回值差别,Generator 返回遍历器,比拟于 async 返回 promise 对象操纵越发贫苦。
参考: