ES6新特性八:异步函数用法实例详解

  

本文实例讲述了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新特性八:异步函数用法实例详解