位置: 编程技术 - 正文

NodeJs通过async/await处理异步的方法(nodejs await)

编辑:rootadmin

推荐整理分享NodeJs通过async/await处理异步的方法(nodejs await),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node async hook,node.js async/await,nodejs async_hooks,nodejs async_hooks,nodejs async,node async await,nodejs async,node.js async/await,内容如对您有帮助,希望把文章链接给更多的朋友!

场景

远古时代

我们在编写express后台,经常要有许多异步IO的处理。在远古时代,我们都是用chunk函数处理,也就是我们最熟悉的那种默认第一个参数是error的函数。我们来模拟一个Mongo数据库的操作,感受一下。

这个也就是被我们所诟病的callback hell,一堆横向金字塔,如果将回调拆分成函数,则会变得非常支离破碎。为了防止到恶心到大家,我甚至没有写关于错误的处理,正常来说,每一个异步的操作都需要都它的error进行相应的显示或处理的。

Promise时代

后来进入了好一点的时代就是Promise,我们也可以称作链式操作。关于Promise,我也是之前有专门写过一系列的博文,有兴趣可以回头翻一下。这里来看看,将以上改写之后的状况。

我们可以看到,我们将金字塔已经平铺成一条线状结构了。相比之前恶心难以维护的chunk函数,变成了promise函数,并且错误的处理也变得十分优雅。但是我们仍然不可忽视某些问题,例如我们必须忍受各个逻辑被一个又一个的then()包裹起来,每一个函数都有其独立的作用域,如果为了共享某个数据就必须挂在最外层,最重要的还是,它与我们熟悉的同步编程仍然有差别。

Generator时代

TJ大神,借着ES6的Generator迭代器,最早实现了异步编程同步化的功能,也就是最为我们所熟知的co库。我们通过co(function *(){})可以使函数内部通过迭代器来控制。而co在这里则是充当了启动器的角色。关于Generator和co我在之前的博文也同样说过。

我们已经非常接近同步编程了,在co包裹的函数内部,只有一个异步执行完毕,才会继续执行下面的代码。并且错误的处理也是通过try and catch进行实现的。不过我们不得不承认的是,迭代器终究不是为异步而存在的。里面的yield和*的语义也并不代表的就是异步函数标志。并且迭代器是需要co去驱动的,它和我们想象中的函数多少有一点点不同。

async/await时代

NodeJs通过async/await处理异步的方法(nodejs await)

我们关注到ES7的async/await,才发现这才是我们想要的!我们将上面的代码小小改写一下。

我们可以看到inserData是一个真正的函数,是我们可以直接去调用而无需启动器驱动的。当然内部我们也可以感受到处理yield变成了await以外,并没有很大区别。async/await,更符合我们异步编程的语义。

那么问题来了,how to use it&#;

使用

我们一开始就说过,babel已经支持async的transform了,所以我们使用的时候引入babel就行。当然server端和browser端,可以有不同的处理方法。在开始之前我们需要引入以下的package,preset-stage-3里就有我们需要的async/await的编译文件。

Browser端

Babel一开始的出现就是为了让旧浏览器也能支持新的ES6特性,提升我们的开发体验。所以在Babel一开始就是可以通过babel-cli终端进行编译的。或者引入babel文件在浏览器端进行编译。当然这些都不是我最推荐的,所以我就带过不说啦。在前端静态资源配置里,webpack是现在比较好的解决方案,它支持静态资源的模块依赖,打包合并,还有语言的预处理,当然在这里我们就是指babel的处理。

这样我们就可以愉快的使用了。

Server端

相对来说,后端比前端需要处理的异步IO地方多得多,也是更加需要这个。那我们在Server端又如何引入babel呢?

其实最简单也是最麻烦的方法就是,直接把js文件通过babel编译出新的文件再来使用。当然也就免不了冗余文件了,眼不见心不烦,还是换一个方法吧。

我们使用官方提供的require hook方法,顾名思义就是通过require进来后,接下来的文件进行require的时候都会经过Babel的处理。因为我们知道CommonJs是同步的模块依赖,所以也是可行的方法。我们需要多一个用于启动的js文件,一个真正执行程序的js文件。

配置完hook之后,我们就配置babel的.babelrc文件,它是一个json格式的文件。es看情况配置,如果是已经是Node5.0版本,就无需再进行编译。

最后我们的异步函数代码,写在app.js里即可。

标签: nodejs await

本文链接地址:https://www.jiuchutong.com/biancheng/379554.html 转载请保留说明!

上一篇:Node.JS使用Sequelize操作MySQL的示例代码(node.js使用mysql)

下一篇:浅谈node的事件机制(node解决了什么问题)

  • 增值税税控开票软件怎么下载
  • 小规模未达起征点免税分录
  • 保理公司会计核算讲解
  • 每股收益无差别点计算公式怎么解
  • 2019年大写二o一九
  • 金税盘全额抵扣分录
  • 企业所得税汇算清缴退税分录
  • 床位周转率计算公式
  • 个人所得税变动率计算公式为多少
  • 文化事业建设税怎么申报
  • 小规模免了增值税怎么办
  • 哪些发票可以抵扣成本
  • 上个月开的增值税发票这个月可以作废吗
  • 所得税费用税率规定
  • 选择纳税人身份考虑的因素
  • 委托贷款利息收入怎么开发票
  • 支付应付账款的会计科目
  • 会计低值易耗品有哪些
  • 建筑行业成本预算和施工方案哪个更有含金量
  • 基本户往一般户转账用途怎么写
  • win10指纹传感器在哪里
  • windows10office更新
  • 没有系统U盘,电脑密码忘记了如何打开电脑
  • 鸿蒙2.0 更新
  • 上季度成本多结转了怎么调
  • 电脑网络提示ip地址错误怎么办
  • 在网上怎
  • 预缴企业所得税怎么做账务处理
  • 公司法人变更账户没有改有影响吗
  • paul滑雪
  • 普通发票有抵扣联没
  • ts中如何定义一个数组
  • 购进农产品直接销售核定农产品增值税进项税额计算表
  • 代管资金支出怎么做账
  • 债权投资利息收入调增还是调减
  • 一般纳税人开普票要交税几点
  • 继续教育的相关知识
  • 企业残障金缴纳标准
  • 筹建期间业务招待费的财税处理规定
  • 股息所得缴纳个税吗
  • 厂家给经销商的活动方案怎么写
  • 进项税额转出有什么好处
  • 个人与公司交易需要纳税吗
  • 仓库包材问题和造成的后果
  • 短期借款按月计提的分录
  • 存货周转率越高好还是越低好
  • 退休后的税费
  • 商场预付卡
  • 赠送给客户的产品怎么做账
  • 银行存款的收付应严格执行()的规定
  • 办理国有土地使用证
  • sql server2008启动
  • sql语句递归
  • win2000蓝屏0x0000007b
  • freebsd安装到u盘
  • 手工设置源泉设计
  • Windows计划任务 不管是否登录 没有窗口
  • win8.1安装过程
  • KunlunPlatform.exe是什么进程?KunlunPlatform.exe是安全的程序吗?
  • 未能打开这台计算机上的组策略对象
  • 苹果mac查看
  • win7系统加内存条怎么设置
  • win10更新系统遇到错误
  • VS2013 OpenGL MFC 编程问题
  • perl编程
  • perl中打开文件
  • javascript基于什么的语言
  • 创建一个批处理文件,其功能是在当前
  • 欢迎使用微信支付
  • bat批处理文件的语句
  • python标准模板库
  • android tabview
  • 新浪微博模仿推特
  • 高性能javascript的内容简介
  • 百望税控盘电子发票发送邮箱
  • 地税局工作人员工资标准多少
  • 建筑施工及安装单位企业在异地
  • 甲种本什么意思
  • 税务部门行政审批
  • 重庆个人税务查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设