这篇文章将为大家详细讲解有关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 (),=祝辞,{};
<强>二、语法强>
异步函数的语法规则总体上比较简单,难点是错误处理机制。