`

使用async.waterfall封装数据库查询

阅读更多
  近来学习node.js,想到一个使用async.waterfall封装数据库访问的简单方法,代码很容易,一看就明白。
  需要注意的就是waterfall传入参数(使用第二个函数传入参数)、传出结果的方法。


var oracledb = require('oracledb');
var dbConfig = require('./dbconfig');

function doConnect(cb) {
	oracledb.getConnection(
		{
			user          : dbConfig.user,
			password      : dbConfig.password,
			connectString : dbConfig.connectString
		},
		cb);
};

function doRelease(conn) {
	conn.release(function (err) {
		if (err)
			console.error(err.message);
	});
};

function doQuery(conn,sql,param, cb) {
	console.log('sql='+sql+', param='+param);
	conn.execute(
		sql,
		param, 
		{ outFormat: oracledb.OBJECT }, 
		function(err, result)
		{
			if (err) {
				return cb(err, conn);
			} else {
				return cb(null, conn,result.rows);
			}
		});
};

function select(sql,param,callback){
	var async = require('async');
	async.waterfall([
		doConnect,
		function(conn,cb) {
			cb(null, conn, sql, param);
		},
		doQuery
	],function(err,conn,result){
		if (err) { console.error("In waterfall error cb: ==>", err, "<=="); }
		else{callback(result);}
		if (conn){ doRelease(conn);}
	});
};

module.exports.select = select;


使用示例:
var dbUtil = require('./server/util/DbUtil');//上面的文件

dbUtil.select("select * from tab",{},function(result){
    console.log(result);
});

分享到:
评论

相关推荐

    async.js中waterfall、series、parallel的区别

    async.waterfall([ function(callback) { // 读取文件 fs.readFile('file.txt', 'utf8', callback); }, function(contents, callback) { // 根据文件内容处理数据 processData(contents, callback); }, ...

    async.min.js

    async.min.js

    SpringMVC文件上传

    11:01:33,545 DEBUG ThreadPoolAsynchronousRunner:730 - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@5b28c08e -- Running DeadlockDetector[Exiting. No pending tasks.] 11:01:43,558 ...

    cmsdk_ahb_to_apb_async.v

    cmsdk_ahb_to_apb_async.v

    async.each_map_eachSeries_mapLimit

    async.each_map_eachSeries_mapLimit 在每个文件夹中,运行“npm install async” 在01文件夹中,使用async.each(messages, send, cb)的方法,任务并行执行。 在文件夹02中,使用async.map(messages,send, cb)的方法...

    required.js 的 async.js

    我在网上没找到这个文件的下载,忘记出处了,实在网页上复制过来的,亲测有效可用

    SQLite-f047920c_sqlite3async.c_sqlite源码_

    5. **API扩展**:`sqlite3async.c`扩展了SQLite的原生API,增加了用于启动异步操作的新函数,如`sqlite3_async_init()`、`sqlite3_async_exec()`等,以便开发者能够方便地使用异步功能。 学习和研究`sqlite3async.c...

    异步JS工具Async.js.zip

    虽然是为 Node.js 设计的,但是它也可以直接在浏览器中使用。 Async 提供了大约20个函数,包括 map, reduce, filter, forEach 等等,也有常用的异步流程控制模式,并行,瀑布等等。 标签:Async

    jquery.treegrid.async.js

    使用Bootstrap-table和JQuery TreeGrid插件展示树形表格,实现异步加载大数据量。

    jscex.async.js

    var drawAsync = eval&#40;Jscex.compile("async", function (&#41; { while (true) { that.context.drawImage(that.offCanvas, 0, 0,that.canvas.width,that.canvas.... $await(Jscex.Async.sleep(50)); } }))

    异步调用_Async.rar

    这个压缩包“异步调用_Async.rar”可能包含了一个名为“Async.swf”的文件,这可能是一个教学演示或交互式示例,用于解释异步编程的概念。 在现代编程中,尤其是在Web开发和服务器端编程中,异步处理扮演着重要角色...

    前端开源库-async.util.keyiterator

    5. **可扩展性**:`async.util.keyiterator`的API设计简洁,易于理解和使用,同时也方便与其他`async`库函数结合,以满足各种复杂的需求。 使用`KeyIterator`的基本步骤如下: 1. 引入`async`库,例如通过npm安装...

    promise-waterfall:promise-waterfall 使用顺序流控制功能扩展了 promise 实用程序,例如 async.waterfall

    Promise-瀑布Promise-waterfall 通过像这样的顺序流控制扩展了 promise 实用程序。 由于Promise.all(promiseArr) || Promise.spread(promiseArr)同时执行promise,promiseArr 中的每一个函数都不能依赖另一个,如果...

    async-autotarget:为 async.auto 选择子树

    目标是使用async.auto简化编写异步工作流,替换否则代码将有条件地改变输入对象或函数将在执行前检查其先决条件的情况。 例子 var async = require ( 'async' ) ; var autotarget = require ( 'async-autotarget' ...

    async.vue Es6

    es6 async.vue

    tornado-async.zip

    在传统的同步编程中,当程序执行数据库查询时,整个进程会被阻塞,直到查询完成。但在异步环境中,我们可以使用非阻塞I/O,如aiomysql,来发起数据库请求,然后立即返回,让IOLoop继续处理其他任务。这样,即使...

    前端项目-neo-async.zip

    【标题】"前端项目-neo-async.zip"指的是一个与前端开发相关的压缩包,其中包含了一个名为"NeoAsync"的项目。这个项目是作为Async库的一个替代品设计的,旨在提供相似的功能,同时在性能上有所提升。 【描述】中的...

    asyncfnqueue一个异步函数队列化执行库

    8. **与其他库集成**:`async-fn-queue`与其他JavaScript库和框架的兼容性良好,可以轻松地与Promise、async/await语法结合使用,也可以在Node.js或浏览器环境中运行。 总之,`async-fn-queue`库为JavaScript开发者...

    download_ccxt_async.py

    download_ccxt_async.py

    Ajax-render_async.zip

    Ajax-render_async.zip,render_async允许使用ajax异步包含页面,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载...

Global site tag (gtag.js) - Google Analytics