文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript中的异步能省掉await吗?

2024-04-02 19:55

关注

之前我知道要在JavaScript中同步获取异步执行的结果,必须带await;在for循环中,如果不用Promise.All的话,异步不起效果。但是每次需要等待执行结果的时候,都需要带asyncawait,我觉得老麻烦了,也不好看。如果记住了这两个单词的写法倒还好,没记住的话每次拼错,能把思路打断,忽然冒出这样的单词,也不美观。

于是我就一致致力于解决这个问题,作为一个经常以造轮子为自豪的程序员,我认为我有责任为JavaScript的改变做出一点小小的贡献。

请看下面这段代码:


const trans = require('node-google-translate-skidz');

function translate (str, strEn, tarEn) {
  let p = () => {
    return new Promise((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中,不管你如何包裹,用什么技术都无法真正避免asyncawait了。

看translate方法调用的地方,调用完之后打印翻译的结果。这么做的目的,我当然是希望有结果之后打印了,如果打印的是Promise { <pending> },那说明没有等待就直接执行了。

为了达到有结果之后再打印的目的,我在translate方法中自作聪明地封装了一道async()=>{await}, 然后让translate返回await执行的结果。但是这个方法不会起到任何作用,因为最后打印的结果仍然是我想要竭尽全力避免的

为什么呢?因为我搞忘了async只对function起作用,也就是说async是有作用域的。在我执行了let c = translate('中文')这个方法之后,因为我没有告诉编译器translate需要await(我自以为translate内部已经实现了asyncawait,那么translate就会自动等待执行结果返回。但是因为有作用域的存在,translate内部的作用域是无法影响到translate方法执行的这一层面上的。),所以编译器还是直接执行了console.log('c', c) ,也就是打印了Promise { <pending> }。

通过引入作用域这个概念,方法体的asyncawait无法使方法调用这个层级也asyncawait,你大概就能理解JavaScript中,为什么异步无法省略await了。

到此这篇关于JavaScript中的异步能省掉await吗?的文章就介绍到这了,更多相关JavaScript中的异步内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯