首页 > 编程语言 >node.js express框架使用ES8实现优雅的异步处理

node.js express框架使用ES8实现优雅的异步处理

时间:2024-04-07 18:00:52浏览次数:21  
标签:node 异步 await express js async ES8 data

node.js是JavaScript运行在服务端的框架,采用单线程,异步事件回调方式,由于其在web服务上优异的性能,越来越多的成为开发web服务和中间件的选择,其最大社区npm发展也异常迅猛。但是因为异步回调导致的回调地狱,困扰着广大的程序员,其发展也受到阻碍。

为了解决这个问题,出现了各种各样的解决方案。ES5时代,只能使用第三方库:例如async库,promise。async谈不上优雅,只能说解决了问题而已,代码晦涩难懂,程序流也有点混乱。promise虽然没有了回调地狱,却带来了满天飞的then。此时express是node.js的第一个web框架。

ES官方提供了自己的解决方案,迅速制定了新的标准ES6。ES6中带来了Generator函数,配合yield语句,实现程序的暂停执行和恢复执行,将底层异步函数变为同步执行。于是,基于ES6的二代web框架koa出现了。Generator函数并不是包治百病,脱离koa框架需要而外封装,比如co库。总之,ES官方组织他们对于Generator函数是不满意的,于是ES7以迅雷不及掩耳之势冲出江湖。

ES8中采用async/await这个目前为止,异步回调最佳的解决方案。质上讲,async/await规范是Generator函数+yield语句的语法糖。返回部分都是一个Promise对象。async/await比Generator函数+yield语句要更加优雅好用。node.js少不了又基于ES7搞出了第三代web框架koa2。

node.js这样迅速的发展,也许你还在用express框架,koa2框架都出来了(目前koa官网默认是koa2,koa已经成为历史)。express的异步处理实在是太....,升级koa2吧,这又是个大工程。还好async/await可以让你保持原有框架,并优雅的解决回调地狱的问题。看下面的例子:

原有express+Promise接受请求并返回数据的例子:
 

router.post('/find', function (req, res, next) {

let params = req.body;
let con = {
gameId: params.gameId
};
messageDao.findOne(con).then((data) => {
if (!data) {
return res.json({ code: -1, msg: '消息不存在' });
}
res.json({code: 0,message: "success",data: data});
});
});
使用async/await:
router.post('/find', async function (req, res, next) {

let params = req.body;
let con = {
gameId: params.gameId
};
let data = await messageDao.findOne(con);
if (!data) {
return res.json({ code: -1, msg: '消息不存在' });
}
res.json({code: 0,message: "success",data: data});
});
使用 async/await后,基本同写同步的Java代码没啥区别,加上ES6中就已经提供的class,可以实现面向对象的封装、继承特性。还有指令式语言的for循环控制流。总之,node.js正在将函数式语言和指令式语言的优点都采纳过来,甚至coffeeScript的语法糖也引入到新的ES标准中。大有海纳百川趋势,相信node.js未来发展会更好。
 

标签:node,异步,await,express,js,async,ES8,data
From: https://www.cnblogs.com/sexintercourse/p/18119609

相关文章

  • 用async/await改造Node.js(Express)网站
    用async/await改造Node.js(Express)网站Mike的读书季关注IP属地:北京2018.11.0200:13:00字数582阅读3,1151.回调的嵌套陷阱在Node.js中,使用回调的方式进行异步操作,我们以读取文件内容为例:constfs=require('fs');//定义一个以回调的方式获取文件的函数funct......
  • node 建立一个electron的hello world 的工程 有窗体const { app, BrowserWindow } = r
     要创建一个Electron的"HelloWorld"工程,可以按照以下步骤进行:首先,确保你已经安装了Node.js。使用命令行工具进入你要创建项目的目录。运行以下命令来初始化一个新的Node.js项目:bash|npminit-y这将创建一个默认的package.json文件。确保你......
  • NodeJs进阶开发、性能优化指南
    相信对于前端同学而言,我们去开发一个自己的简单后端程序可以借助很多的nodeJs的框架去进行快速搭建,但是从前端面向后端之后,我们会在很多方面会稍显的有些陌生,比如性能分析,性能测试,内存管理,内存查看,使用C++插件,子进程,多线程,Cluster模块,进程守护管理等等NodeJs后端的知识,在这里为大......
  • node.js常用指令
    1、node:启动Node.jsREPL(交互式解释器)。node2、node[文件名]:执行指定的JavaScript文件。nodeapp.js3、npminit:初始化一个新的Node.js项目,生成package.json文件。此命令会创建一个package.json文件,其中包含项目的名称、版本、描述等信息,并且可以选择添加一些默......
  • Do not nest ternary expressions no-nested-ternary 这个报错什么意思
    ESLint规则no-nested-ternary当检测到代码中存在嵌套的三元表达式时,会发出警告或错误。该规则旨在通过禁止使用嵌套的三元表达式来提升代码的可读性和可维护性,因为随着条件复杂度的增加,深度嵌套的三元表达式往往会变得难以理解和推理。三元表达式:三元表达式是JavaScript中一......
  • 基于 bindview.js + node + mysql 的简易记账系统
    该项目前端是基于bindview.js和bootcss,后端的基于node.js使用了express框架,数据库使用的mysql8 bindview: bronze-ding/bindview:Bindview.js,是一个使用虚拟DOM来创建真实DOM并提供了数据响应式的Javascript工具库(github.com)功能包括:增加,删除,修改,查询登录......
  • 如何在 Node.js 中使用 bcrypt 对密码进行哈希处理
    在网页开发领域中,安全性至关重要,特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的,这就是bcrypt突出之处所在。Node.js是一个流行的用于开......
  • Node.js毕业设计基于的动物救助系统(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在现代社会中,动物保护已经成为了一个全球性的议题。随着人类社会的发展,动物的生存环境受到了严重的威胁,许多动物面临着生存危机。因此,建立一个有效的动物救......
  • Node.js毕业设计基于的动漫视频管理分析系统的设计与实现(Express+附源码)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今数字化时代,动漫产业作为文化产业的重要组成部分,受到了广大年轻人的热爱和追捧。随着互联网的普及,越来越多的人选择在线观看动漫视频,这为动漫视频管理......
  • DevExpress WinForms中文教程 - 如何通过UI测试自动化增强应用可靠性?(一)
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!UI自动化测试利用特定的工具/框架来模拟用户与界面的......