async的waterfall
来源:互联网 发布:数据透视图去掉汇总行 编辑:程序博客网 时间:2024/06/01 10:13
我们在操作数据库的时候经常会这样写,以 Post.getOne 为例:
Post.getOne = function(name, day, title, callback) { mongodb.open(function (err, db) { if (err) { ... } db.collection('posts', function (err, collection) { if (err) { ... } collection.findOne({ ... }, function (err, doc) { if (err) { ... } collection.update({ ... }, function (err) { mongodb.close(); callback( ... ); }); }); }); });};
这就是典型的深度嵌套回调,代码看起来并不美观。下面我们使用 Async 解决这个问题。
首先,在 package.json 中添加对 Async 的依赖:
"async": "*"
并 npm install 安装 Async 包。
在使用 Async 之前,我们先学习下 async.waterfall 的基本用法。
waterfall(tasks, [callback]) :多个函数依次执行,且前一个的输出为后一个的输入,即每一个函数产生的值,都将传给下一个函数。如果中途出错,后面的函数将不会被执行。错误信息以及之前产生的结果,将传给 waterfall 最终的 callback,一个简单的例子:
var async = require('async');async.waterfall([ function(callback){ callback(null, 'one', 'two'); }, function(arg1, arg2, callback){ console.log('arg1 => ' + arg1); console.log('arg2 => ' + arg2); callback(null, 'three'); }, function(arg3, callback){ console.log('arg3 => ' + arg3); callback(null, 'done'); }], function (err, result) { console.log('err => ' + err); console.log('result => ' + result);});
运行结果为:
arg1 => onearg2 => twoarg3 => threeerr => nullresult => done
将 callback(null, 'three'); 修改为:
callback('error occurred !', 'three');
运行结果为:
arg1 => onearg2 => twoerr => error occurred !result => three
阅读全文
0 0
- async的waterfall
- async waterfall步骤出错后的重试
- Pomelo async waterfall
- nodejs基于async waterfall/retry的出错重试流程设计
- Async:对比学习waterfall和series的用法
- Waterfall
- waterfall
- node.js 之async.js 里waterfall模块样例
- nodejs常用模块async(waterfall,each,eachSeries,whilst)
- async异步问题(waterfall、parallel、eachSeries、map、whilst)
- kissy waterfall插件实现的瀑布流
- jQuery Waterfall插件的使用-瀑布流图片显示
- Python,分析爬取简单waterfall型网页的部分内容
- waterfall model
- Waterfall 软件工程
- vue-waterfall
- XMLDOM 的async属性
- jquery ajax的async
- MongoDb的Java客户端配置
- PAT (Basic Level) Practise (中文) 1069. 微博转发抽奖(20)
- Windows 10 64位 安装TensorFlow
- PAT 1039. Course List for Student (25) Hash,卡时间题
- Android热更新:微信Tinker框架的接入与测试
- async的waterfall
- web学习之js学习引索
- linux split 命令 分割
- android 电子签名 手写签名 功能实现
- 关于Expression.Equal方法的使用
- 线程安全的实现方法
- oracle 下载地址
- RF+Appium 压力测试:安装卸载和升降级测试
- Configuring HiveServer2 for CDH