【问题标题】:synchronous queries on oracledb using aysync in nodejs在 nodejs 中使用 aysync 对 oracledb 进行同步查询
【发布时间】:2016-02-02 04:46:13
【问题描述】:

我对 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);
                                });
                });
};

【问题讨论】:

  • 代码看起来不错,有什么问题?

标签: javascript node.js oracle express node-async


【解决方案1】:

快速浏览一下代码,我注意到您的“回调”调用不在传递给执行的回调函数中。这意味着在获得执行方法的结果之前,您将进入瀑布的下一步。这是您的代码稍作修改以说明我的意思。另外,完成后不要忘记释放连接。

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);
                                });
                });
};

【讨论】:

  • 感谢您的回答,但我没有得到您的澄清。你能用这个例子解释一下吗?
猜你喜欢
  • 2020-07-08
  • 2018-08-12
  • 2023-03-28
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 2016-06-02
  • 2020-05-06
相关资源
最近更新 更多