更新:下面更新的代码(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也相当新,所以请耐心等待。在此先感谢您的帮助。
答案 0 :(得分:0)
我看到你正在使用异步,这很好。查看使用async.eachSeries迭代头数组而不是for循环。