如何在Javascript中使用异步awai方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>承诺对异步的处理强>
虽然节点。js的异步IO带来了对高并发的良好支持,同时也让“回调”成为灾难,很容易造成回调地狱。传统的方式比如使用具名函数,虽然可以减少嵌套的层数,让代码看起来比较清晰。但是会造成比较差的编码和调试体验,你需要经常使用用ctrl + f去寻找某个具名函数的定义,这使得IDE窗口经常上下来回跳动。使用承诺之后,可以很好的减少嵌套的层数。另外承诺的实现采用了状态机,在函数里面可以很好的通过解决和拒绝进行流程控制,你可以按照顺序链式的去执行一系列代码逻辑了。下面是使用承诺的一个例子:
const request =,要求(& # 39;请求# 39;);//,请求的url和标题 const options =, { ,url: & # 39; https://api.github.com/repos/cpselvis/zhihu-crawler& # 39; ,标题:{ & # 39;才能用户代理# 39;:,& # 39;请求# 39; ,} };//,获取仓库信息 const getRepoData =,(),=祝辞,{ ,return new 承诺((解决,,拒绝),=祝辞,{ 请求(才能选择,,(呃,,,,身体),=祝辞,{ ,,if (err), { ,,,拒绝(错); ,,} ,才能解决(身体); ,,}); ,}); }; getRepoData () ,不要犹豫((结果),=祝辞,console.log(结果),) ,.catch((原因),=祝辞,console.error(原因););//,此处如果是多个承诺顺序执行的话,如下://,每个然后里面去执行下一个承诺//,getRepoData ()//,,不要犹豫((value2),=祝辞,{return promise2})//,,不要犹豫((value3),=祝辞,{return promise3})//,,不要犹豫((x),=祝辞,console.log (x))
不过承诺仍然存在缺陷,它只是减少了嵌套,并不能完全消除嵌套。举个例子,对于多个承诺串行执行的情况,第一个承诺的逻辑执行完之后,我们需要在它的然后函数里面去执行第二个承诺,这个时候会产生一层嵌套。另外,采用承诺的代码看起来依然是异步的,如果写的代码如果能够变成同步该多好啊!
<强>发电机对异步的处理强>
谈到发电机,你应该不会对它感到陌生。在节点。js中对于回调的处理,我们经常用的TJ/公司就是使用发电机结合承诺来实现的,公司是协同程序的简称,借鉴于python, lua等语言中的协程。它可以将异步的代码逻辑写成同步的方式,这使得代码的阅读和组织变得更加清晰,也便于调试。
const co =,要求(& # 39;有限公司# 39;); const request =,要求(& # 39;请求# 39;); const options =, { ,url: & # 39; https://api.github.com/repos/cpselvis/zhihu-crawler& # 39; ,标题:{ & # 39;才能用户代理# 39;:,& # 39;请求# 39; ,} };//,屈服后面是一个生成器,发电机 const getRepoData =,函数*,(),{ ,return new 承诺((解决,,拒绝),=祝辞,{ 请求(才能选择,,(呃,,,,身体),=祝辞,{ ,,if (err), { ,,,拒绝(错); ,,} ,才能解决(身体); ,,}); ,}); }; 公司(*,()的函数,{ ,const result =,油品收率getRepoData; ,//?如果有多个异步流程,可以放在这里,比如 ,//const r1 =,油品收率getR1; ,//const r2 =,油品收率getR2; ,//const r3 =,油品收率getR3; ,//每个收益率相当于暂停,执行收益率之后会等待它后面的发电机返回值之后再执行后面其它的收益率逻辑。 ,return 结果; })(function (值),{ ,console.log(价值); },,function (错),{ ,console.error (err.stack); });
<强>异步/等待对异步的处理强>
虽然有限公司是社区里面的优秀异步解决方案,但是并不是语言标准,只是一个过渡方案.ES7语言层面提供async/等待去解决语言层面的难题。目前async/等待在IE中边缘已经可以直接使用了,但是chrome和Node . js还没有支持。幸运的是,巴别塔已经支持了异步的变换,所以我们使用的时候引入巴别塔就行。在开始之前我们需要引入以下的包,preset-stage-3里就有我们需要的异步/等待的编译文件。
无论是在浏览器还是节点。js端都需要安装下面的包。
,美元npm install babel-core ——保存 美元,npm install  babel-preset-es2015 ——保存 美元,npm install  babel-preset-stage-3 ——保存如何在Javascript中使用异步awai方法