本文实例讲述了ES6新特性之异步函数用法。分享给大家供大家参考,具体如下:
节点。js版本7及之后版本才支持该函数。
可以简单的理解为他是发电机函数的语法糖,即发电机函数调用<代码> next() 代码>返回的结果。
①发电机<代码> 代码>函数需要下一个()或执行器进行执行,而异步函数只需和普通函数一样执行。
②<代码>异步代码>和<代码>等待> 代码,比起星号和<代码>产量> 代码,语义更清楚了. .
③,这比发电机函数的返回值是迭代器对象方便多了。你可以用然后方法指定下一步的操作。
var fs=要求(fs);//读取文件的方法 var readFile=函数(文件名){ 返回新的承诺(函数(解决,拒绝){ fs。readFile函数的文件名,(错误,数据){ 如果(错误)拒绝(错误); 解决(数据); }); }); }; var创=函数* (){ var f1=产量readFile (/etc/fstab); var f2=产量readFile (“/etc/壳”); console.log (f1.toString ()); console.log (f2.toString ()); }; var asyncReadFile=异步函数(){ var f1=等待readFile (/etc/fstab); var f2=等待readFile (“/etc/壳”); console.log (f1.toString ()); console.log (f2.toString ()); }; >之前
在异步程序中(比如在nodejs),在下一步程序中,需要异步返回的结果,由于是异步,下一步会在异步返回前就会执行完,这时程序就会出现不是我们预想的结果,而异步函数就可以很好的解决这一问题。我们将异步操作放在等待后面,等待异步返回了结果程序才会向下执行。
举例:
/* * *由Dason> 异步函数f () { 返回“hello world”;//会自动调用承诺。解决(“hello world”),将其转化为承诺对象 } f ()。然后(v=比;console.log (v))//癶ello world” 异步函数f () { 把新的错误(“出错了'); } f () ( v=比;console.log (v), e=比;console.log (e) )//错误:出错了 >之前④异步函数返回的承诺对象,必须等到内部所有等待命令后面的承诺对象执行完,才会发生状态改变,除非遇到返回语句或者抛出错误。也就是说,
。<强>注意1 强>:
。异步函数main () { 尝试{ var val1=等待没什么(); var val2=等待secondStep (val1); var val3=等待thirdStep (val1, val2); 控制台。日志(“决赛:“val3); } 抓住(err) { console.error(错); } } >之前⑤等待命令后面的承诺对象如果变为<代码>拒绝代码>状态,则拒绝的参数会被<代码>抓住代码>方法的回调函数接收到。
异步函数f () { 等待Promise.reject(“出错了');//没有回报,即不是异步函数返回的承诺对象,也会被抓方法的回调函数接收的到 } f () 不要犹豫(v=比;console.log (v)) .catch (e=比;console.log (e))//出错了 >之前<强>注意2:>强多个<代码>等待> 代码命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。不然会增加耗时。
//耗时写法 让foo=等待getFoo (); 让酒吧=等待getBar ();//同时触发//写法一 让(foo, bar)=等待Promise.all ([getFoo (), getBar ()));//写法二 让fooPromise=getFoo (); 让barPromise=getBar (); 让foo=等待fooPromise; 让酒吧=等待barPromise; >之前希望本文所述对大家ECMAScript程序设计有所帮助。
ES6新特性八:异步函数用法实例详解