当前位置: 首页 > Web前端 > JavaScript

Generator,async-await语法糖

时间:2023-03-27 10:05:32 JavaScript

Generator生成器函数,相对于普通函数,多了一个*(星号)。调用生成器函数不会立即执行自身,而是返回一个生成器对象,直到调用next()方法。function*fn(){console.log("print")constres=yield'foo';控制台日志(资源);try{...}catch(e){console.log(e);}}const生成器=fn();generator.next('para');generator.throw(newError('handlethrow'));可以在函数体中加入yield关键字,相当于暂停函数,直到next()方法执行完毕。next()方法可以传入参数,作为yield方法的返回值。在函数体外执行生成器函数的throw()方法是手动抛出异常。让生成器在内部接收。生成器实例functionajax(url){...}function*fn(){constres1=yieldajax('...');控制台日志(res1);constres2=yieldajax('...');console.log(res2);}constg=fn();constresult=g.next();result.value.then(data=>{constresult2=g.next(data);if(result2.done)returnresult2.value.then(data=>{g.next(data);})})看起来更像同步代码并且更扁平。调用生成器then()方法最好判断结果的done属性是否为真。为真时,就已经结束了,不需要再继续下去了。async/await语法糖async/await语法糖比generator用起来更方便,把*换成async,把yield换成await。而且async函数会返回一个promise对象,操作起来更方便