在释放连接oracledb模块node.js之前执行多个语句

时间:2016-06-20 15:00:57

标签: javascript node.js oracle

更新:下面更新的代码(2016年6月20日)。我仍然无法完成异步瀑布,但是当我将回调添加到.forEachOf函数的函数(错误)部分时,它仍然给我错误。

我正在尝试运行多个insert语句,使用node.js的oracledb模块将两个数组中的每个值插入到oracle数据库中。我尝试使用for循环来使用迭代器来遍历下一个insert语句中的每个数组。我是node.js的新手,并且无法理解回调,我认为只是提前调用它来释放连接。我收到错误说明......

NJS-032: connection cannot be released because a database call is in progress

这是我正在使用的功能代码。

  var doinsert2 = function (conn, cb) {
  //for(var i = 0; i<headers.length; i++)
  async.forEachOf(headers, function (value, key, callback) 
  {
      conn.execute(
        "INSERT INTO " + db_extern_msg_prop + " VALUES ('" + unique_id + "','" + headers[key] + "',0,'" + values[key] + "')",
        //[unique_id, 'prop name test', 0, 'prop value test'],  // Bind values
        function(err, result)
        {
          if (err) {
            //return cb(err, conn);
            console.log("Error: " + err);
          } else {
            //console.log("SECOND INSERT : Rows inserted: " + result.rowsAffected);  // 1
            //return cb(null, conn);
          }
        });
        callback();
   },function (err) {
    //return cb(null, conn);    
   });

};

//used to order the functions to be processed. 
//This keeps the connection first, and the same unique id for both tables.
async.waterfall(
  [
    doconnect,
    doinsert1,
    doinsert2
  ],
  function (err, conn) {
    if (err) { console.error("In waterfall error cb: ", err, " "); }
    if (conn)
      dorelease(conn);
  });

所有记录都输入正常,但我想更好地了解我所缺少的内容。 stackoverflow也相当新,所以请耐心等待。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我看到你正在使用异步,这很好。查看使用async.eachSeries迭代头数组而不是for循环。