位置: 编程技术 - 正文

node.js下when.js 的异步编程实践(node.js web)

编辑:rootadmin

推荐整理分享node.js下when.js 的异步编程实践(node.js web),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node js orm,node.js web,node.js in action,node.js in action,node.js javascript,node:js,node.js gui,node.js in action,内容如对您有帮助,希望把文章链接给更多的朋友!

假设一个业务场景:

通过rss地址,获取rss并保存于文件,rss地址保存于文件中。

完成该场景的业务需要完成3个任务:

1.从文件中读取rss地址。

2.获取rss。

3.保存于文件。

最后将这三个任务进行整合。

准备:

存放rss地址的文件,address.txt。

任务1:

读取rss地址文件的内容并通过callback返回。

任务2:

通过rss地址get到rss,并通过callback返回错误或数据。

任务3:

将rss保存于文件并通过callback返回错误。

整合:

上面的代码是全异步处理,使用最常见的callback处理异步逻辑的返回,好处是标准写法,大家都能容易接受;坏处是耦合性太强,处理异常麻烦,代码不直观,特别是处理业务逻辑复杂和处理任务多的场景,层层的callback会让人眼冒金星,代码难以维护。

Promise/A规范的实现之一when.js正是针对这样的问题域。

让我们来看一下改造后的代码。

任务1:

任务2:

node.js下when.js 的异步编程实践(node.js web)

任务3:

整合:

解释:

promise/A规范定义的“Deferred/Promise”模型就是“发布/订阅者”模型,通过Deferred对象发布事件,可以是完成resolve事件,或者是失败reject事件;通过Promise对象进行对应完成或失败的订阅。

在Promises/A规范中,每个任务都有三种状态:默认(pending)、完成(fulfilled)、失败(rejected)。

1.默认状态可以单向转移到完成状态,这个过程叫resolve,对应的方法是deferred.resolve(promiseOrValue);

2.默认状态还可以单向转移到失败状态,这个过程叫reject,对应的方法是deferred.reject(reason);

3.默认状态时,还可以通过deferred.notify(update)来宣告任务执行信息,如执行进度;

4.状态的转移是一次性的,一旦任务由初始的pending转为其他状态,就会进入到下一个任务的执行过程中。

按照上面的代码。

通过when.defer定义一个deferred对象。

var deferred = when.defer();异步数据获取成功后,发布一个完成事件。

deferred.resolve(data);异步数据获取失败后,发布一个失败事件。

deferred.reject(err);并且返回Promise对象作为订阅使用。

return deferred.promise;订阅是通过Promise对象的then方法进行完成/失败/通知的订阅。

getRssAddress('address.txt') .then(getRss)then有三个参数,分别是onFulfilled、onRejected、onProgress

promise.then(onFulfilled, onRejected, onProgress)上一个任务被resolve(data),onFulfilled函数就会被触发,data作为它的参数.

上一个任务被reject(reason),那么onRejected就会被触发,收到reason。

任何时候,onFulfilled和onRejected都只有其一可以被触发,并且只触发一次。

对于处理异常,when.js也提供了极其方便的方法,then能传递错误,多个任务串行执行时,我们可以只在最后一个then定义onRejected。也可以在最后一个then的后面调用catch函数捕获任何一个任务的异常。

如此写法简单明了。

Promise给异步编程带来了巨大的方便,可以让我们专注于单个任务的实现而不会陷入金字塔厄运,以上代码仅仅是基本使用,when.js提供的功能远远不止本文提到的这些,具体参照官方API。

express的中间件basicAuth详解 basicAuth中间件为网站添加身份认证功能.在使用了该中间件后,用户访问网站时必须输入用户名与密码,在用户输入了用户名与密码并通过验证之后才能访

express的中间件bodyParser详解 bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理.下面是一个文件上传的例子.建立一个1.html页面!DOC

express的中间件cookieParser详解 cookieParser中间件用于获取web浏览器发送的cookie中的内容.在使用了cookieParser中间件后,代表客户端请求的htto.IncomingMessage对象就具有了一个cookies属性,该属

标签: node.js web

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

上一篇:nodejs下打包模块archiver详解(nodejs 程序 打包服务端)

下一篇:express的中间件basicAuth详解(express常用中间件)

  • 哪些进项税额可以抵扣销项税额
  • 小微企业所得税税率2023年最新税率表
  • 民非企业开通捐赠
  • 设备转产需要停止折旧吗
  • 收到发票冲红怎么做分录
  • 非盈利组织企业所得税主表如何填列
  • 工商年报纳税总额怎么算
  • 只有费用没有收入成本怎么填所得税
  • 所得税在什么情况下扣除
  • 小规模纳税人取的专票能抵扣吗
  • 存货盘点科目
  • 因员工过失造成第三方损失
  • 补偿性余额利息的计算公式
  • 预付账款怎么做凭证
  • 2018年车船税收费标准
  • 增值税发票免税和0%区别
  • 计提企业所得税会计分录怎么做
  • 把黑龙江省
  • 按适用税率计税销售额是什么意思
  • 哪些情况下工资不低于最低工资标准的80
  • 小微企业按季度报送财务报表
  • 出口退税成本核算
  • 超额用电罚款应由谁缴纳
  • 增值税系统技术维护费需要勾选吗
  • 预提成本的账务处理
  • 商标注册费相关法律法规
  • 进项和销项相抵还需要交税吗
  • mac 系统查看
  • 税收分类编码怎么添加
  • 要看网怎么找
  • 如果退货卖家拒绝会把货退回来么
  • 承租人对经营租赁和融资租赁会计处理方式
  • PHP:session_status()的用法_Session函数
  • 经营租赁固定资产体现实质重于形式
  • php数组函数 菜鸟
  • 将债务转为资本的,债务人应当将债权人
  • 现金支票提取备用金会计处理
  • vue3elementplus首页布局
  • 解决科学文化领域的矛盾应坚持的方针是
  • 外出经营活动税收管理
  • 小程序封装网络怎么设置
  • 个体户查账征收2023新政策是什么
  • node教程
  • Huggingface之transformers零基础使用指南
  • 个体户个人所得税税率表2023计算
  • 劳动法节假日加班工资
  • 织梦cms要钱吗
  • 如何查询以前申请的新西兰签证记录
  • 防伪税款服务费抵扣
  • 企业固定资产账户核算的固定资产其所有权均属于本企业
  • 待处理流动资产损益是什么类科目
  • 为什么要缴纳保险
  • 个人所得税手续费返还账务处理
  • 减免税的三种方式
  • 保障房异地建设费属不属于土地成本
  • 记账凭证结算方式没出来
  • 进项转出的原因是什么
  • 出口退税申报的报关单无电子信息
  • 库存商品建账
  • 公司注销固定资产必须清理吗
  • 纳税人财务会计制度
  • Select count(*)、Count(1)和Count(列)的区别及执行方式
  • sqlserver2000企业管理器自动关闭
  • mysql根据另一张表更新
  • windows xp 注册表故障恢复
  • ubuntu系统鼠标没反应
  • win7禁用了管理员,怎么取消呢
  • linux中快捷键
  • 安装与配置linux操作系统
  • cocos2d怎么用
  • 实现每个星期的计划英语
  • 你可能不知道的湖北
  • js原生方法大全
  • JavaScript控制台输出
  • 安装了python2.7和3.6怎么切换版本
  • JavaScript Switch 声明
  • 江苏省国家税务局发票查询
  • 山西电子税务局手机版
  • 企业对税务局建议
  • 个税专项扣除填报错误怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设