在 NodeJS 中使用 aysync 对 oracleDB 进行同步查询
synchronous queries on oracledb using aysync in nodejs
我对nodejs很陌生。我正在使用oracledb,并希望按同步顺序进行查询。因此,一旦执行了第一个查询,那么查询的输出将用于第二个查询。我查看了async.waterfall并编写了下面的代码。以同步方式调用函数是正确的方法吗?提前谢谢。第一个查询可能比第二个查询花费更多的时间。
var update = function(fnParam1, fnParam2){
oracledb.maxRows = 10000;
oracledb.getConnection(
{
user : dbConfig.user,
password : dbConfig.password,
connectString : dbConfig.connectString
},
function(err, connection)
{
if (err) { console.log(err.message); return; }
async.waterfall([
function(callback) {
connection.execute("select column1 from table1 where param1 =:nm",[fnParam1],
function(err, result)
{
if (err) { console.log(err); return; }
column1 = String(result.rows[0][0]);
});
callback(null, column1,connection);
},
function(column1, connection,callback) {
connection.execute("select count(*) from table2 where column1 = :par1 and column2= :par2",[column1,fnParam2],
function(err, result)
{
if (err) { console.log(err); return; }
var count = String(result.rows[0][0]);
console.log("count result:" + count)
});
callback(null, count);
}
],
function (err, result) {
console.log("Done" + result);
});
});
};
只是快速浏览一下代码,我注意到您的"回调"调用不在传递执行的回调函数中。这意味着在获得 execute 方法的结果之前,您将进入瀑布中的下一步。这是您的代码略有修改以演示我的意思。另外,不要忘记在完成连接后释放连接。
var update = function(fnParam1, fnParam2){
oracledb.maxRows = 10000;
oracledb.getConnection(
{
user : dbConfig.user,
password : dbConfig.password,
connectString : dbConfig.connectString
},
function(err, connection)
{
if (err) { console.log(err.message); return; }
async.waterfall([
function(callback) {
connection.execute("select column1 from table1 where param1 =:nm",[fnParam1],
function(err, result)
{
if (err) { console.log(err); return; }
column1 = String(result.rows[0][0]);
callback(null, column1, connection);
});
},
function(column1, connection, callback) {
connection.execute("select count(*) from table2 where column1 = :par1 and column2= :par2",
[column1,fnParam2],
function(err, result)
{
if (err) { console.log(err); return; }
var count = String(result.rows[0][0]);
console.log("count result:" + count);
callback(null, count);
});
}
],
function (err, result) {
console.log("Done" + result);
});
});
};
相关文章:
- 在控制器和数据对象之间同步数据
- 同步调用,直到用户通过angular验证为访问者
- javascript函数同步
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 音频和动画在javasctipt循环中同步
- 主线程上的同步XMLHttpRequest已弃用
- 主干网.与Safari同步问题
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 是否同步加载了LINK元素
- 异步获取数据使用JavaScript同步获取数据
- 以同步方式获取Javascript Promise的值
- ajax调用获胜't同步执行
- javascript函数中的异步与同步.(Node.js)
- 如何同步写入process.stdout
- JavaScript 函数同步执行
- HTML5应用程序数据库同步
- Node.js和同步API函数
- 在 NodeJS 中使用 aysync 对 oracleDB 进行同步查询