之前我知道要在javascript
中同步获取异步执行的结果,必须带await
;在for循环中,如果不用promi.all的话,异步不起效果。但是每次需要等待执行结果的时候,都需要带async
战争带来的危害和awa灯光阅读答案it
,我觉得老麻烦了,也不好看。如果记住了这两个单词的写法倒还好,没记住的话每次拼错,能把思路打断,忽然冒出这样的单词,也不美观。
于是我就一致致力于解决这个问题,作为一个经常以造轮子为自豪的程序员,我认为我有责任为javascript
的改变做出一点小小的贡献。
请看下面这段代码:
const trans = require('node-google-translate-skidz');function translate (str, stren, taren) { let p = () => { retu感谢朋友的话语 暖心rn new promi((resolve, reject) => { trans({ text: str, source: stren ? stren : 'zh', target: taren ? taren : 'en' }, function (result) { resolve(result.translation) }); }) } let an = async () => { let b = await p() console.log(b); } return an() //console.log(b)}let c = translate('中文')console.log('c', c)
这段代码可能是我能想出最好的,解决异步问题的方案了,答案依然没有成功。但我终于知道为什么javascript
中,不管你如何包裹,用什么技术都无法真正避免async
和await
了。
看translate方法调用的地方,调用完之后打印翻译的结果。这么做的目的,我当然是希望有结果之后打印了,如果打印的是promi { <pending> },
那说明没有等待就直接执行了。
为了达到有结果之后再打印的目的,我在translate
方法中自作聪明地封装了一道async()=>{await},
然后让translate
返回await
执行的结果。但是这个方法不会起到任何作用,因为最后打印的结果仍然是我想要竭尽全力避免的
为什么呢?因为我搞忘了async
只对function
起作用,也就是说async
是有作用域的。在我执行了let c = translate('中文')
这个方法之后,因为我没有告诉编译器translate
那片星空那片海演员表需要await(我自以为translate内部已经实现了async
和await
,那么translate
我爱米兰歌曲就会自动等待执行结果返回。但是因为有作用域的存在,translate内部的作用域是无法影响到translate
方法执行的这一层面上的。),所以编译器还是直接执行了console.log('c', c)
,也就是打印了promi
{ <pending> }。
通过引入作用域这个概念,方法体的async
、await
无法使方法调用这个层级也async
、await
,你大概就能理解javascript
中,为什么异步无法省略await了。
到此这篇关于javascript中的异步能省掉await吗?的文章就介绍到这了,更多相关javascript中的异步内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 04:53:23,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b37cd74362850317117d72272f376cdb.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:JavaScript中的异步能省掉await吗?.doc
本文 PDF 下载地址:JavaScript中的异步能省掉await吗?.pdf
留言与评论(共有 0 条评论) |