es6中异步函数有什么用

  介绍

这篇文章将为大家详细讲解有关es6中异步函数有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>异步函数

异步函数,使得异步操作变得更加方便。它是发电机函数的语法糖。

发电机函数,依次读取两个文件:

var  fs =,要求(& # 39;fs # 39;);   var  readFile =, function (文件名),{   ,return  new 承诺(function (解决,,拒绝),{   ,fs.readFile(文件名,函数(错误,,数据),{   if 才能;(错误),拒绝(错误);   解决才能(数据);   ,});   ,});   };   var  gen =,函数*,(),{   ,var  f1 =,油品收率readFile (& # 39;/etc/fstab # 39;);   ,var  f2 =,油品收率readFile (& # 39;/etc/壳# 39;);   ,console.log (f1.toString ());   ,console.log (f2.toString ());   };

写成异步函数,就是下面这样:

var  asyncReadFile =, async  function  (), {   ,var  f1 =, await  readFile (& # 39;/etc/fstab # 39;);   ,var  f2 =, await  readFile (& # 39;/etc/壳# 39;);   ,console.log (f1.toString ());   ,console.log (f2.toString ());   };

<强>异步函数对发电机函数的改进,体现在以下四点:

<强> 1)内置执行器

发电机函数的执行必须靠执行器,所以才有了公司模块,而异步函数自带执行器。也就是说,异步函数的执行,与普通函数一模一样,只要一行。

var  result =, asyncReadFile ();

上面的代码调用了asyncReadFile函数,然后它就会自动执行,输出最后结果。这完全不像发电机函数,需要调用一方法,或者用有限公司模块,才能真正执行,得到最后结果。

<强> 2)更好的语义

异步和等待,比起星号和产量、语义更清楚了.async表示函数里有异步操作,等待表示紧跟在后面的表达式需要等待结果。

<强> 3)更广的适用性

有限公司模块约定,收益率命令后面只能是铛函数或承诺对象,而异步函数的等待命令后面,可以是承诺对象和原始类型的值(数值,字符串和布尔值,但这时等同于同步操作)。

<强> 4)返回值是承诺

异步函数的返回值是承诺对象,这比发电机函数的返回值是迭代器对象方便多了。你可以用然后方法指定下一步的操作。

进一步说,异步函数完全可以看作多个异步操作,包装成的一个承诺对象,而等待命令就是内部然后命令的语法糖。

<强>一、基本用法

异步函数返回一个承诺对象,可以使用然后方法添加回调函数。当函数执行的时候,一旦遇到等待就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

function 超时(ms), {   ,return  new 承诺((解决),=祝辞,{   女士,,,setTimeout(解决);   ,});   }   async  function  asyncPrint(价值,,ms), {   ,await 超时(ms);   ,console.log(价值);   }   asyncPrint (& # 39; hello  & # 39;,, 5000年),

上面代码指定5000毫秒以后,输出hello world。

由于异步函数返回的是承诺对象,可以作为等待命令的参数,所以,上面的例子也可以写成下面的形式:

async  function 超时(ms), {   ,await  new 承诺((解决),=祝辞,{   女士,,,setTimeout(解决);   ,});   }   async  function  asyncPrint(价值,,ms), {   ,await 超时(ms);   ,console.log(价值);   }   asyncPrint (& # 39; hello  & # 39;,, 5000年),

异步函数多种使用形式

//,函数声明   async  function  foo (), {}//,函数表达式   const  foo =, async  function  (), {};//,对象的方法   let  obj =, {, async  foo (), {},};   obj.foo () (…)//,Class 的方法   class  Storage  {   ,构造函数(){=,,this.cachePromise  caches.open(& # 39;化身# 39;);   ,}   ,async  getAvatar(名字),{   ,const  cache =, await  this.cachePromise;   ,return  cache.match('/头像/${名称}. jpg”);   ,}   }   const  storage =, new 存储();   storage.getAvatar (& # 39; hzzly& # 39;),然后(…);//,箭头函数   const  foo =, async (),=祝辞,{};

<强>二、语法

异步函数的语法规则总体上比较简单,难点是错误处理机制。

es6中异步函数有什么用