2016-02-01 7 views
0

Я очень новичок в nodejs. Я использую oracledb и хочу сделать запросы в синхронном порядке. Таким образом, как только выполняется 1-й запрос, вывод запроса будет использоваться во втором запросе. Я посмотрел на async.waterfall и написал код ниже. это правильный способ вызова функции синхронно? Заранее спасибо. возможно, что первый запрос занимает больше времени, чем второй.синхронных запросов на oracledb с использованием aysync в nodejs

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

Код выглядит хорошо, в чем проблема? –

ответ

1

Просто принимая быстрый взгляд на код, я заметил, ваши «CallBack» вызовы не в функции обратного вызова, которые передаются для выполнения. Это означает, что вы переходите к следующему шагу в своем водопаде, прежде чем вы получите результаты метода выполнения. Вот ваш код слегка изменен, чтобы продемонстрировать, что я имею в виду. Кроме того, не забудьте выпустить свое соединение, когда закончите с ним.

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

Спасибо за ответ, но я не получил разъяснений. можете ли вы объяснить мне этот пример? – code1234

Смежные вопросы