我有一个nodejs应用程序,它运行大约40个oracle连接/查询。我使用异步限制来自这里提出的解决方案的异步调用。我的问题是在函数/查询完成之前,排水回调正在运行和完成。任何帮助都非常感谢。
var queue = async.queue(runAsyncCallout, 5);
queue.concurrency = 5;
db.collection('callout').find({'active':0}).each(function(error, callout) {
queue.push(callout);
});
queue.drain = function() {
db.collection('callout_lock').update({'context': 'ALL_CALLOUTS'}, {$set: {'lock': '0'}});
db.collection('callout_lock').update({'context': 'ALL_CALLOUTS'}, {$set: {'date': time_stamp}});
console.log("All callouts done unlocking");
};
queue.concurrency = 5;
function runAsyncCallout(callout, callback) {
switch(callout.db_connect){//Grab connection profiles
case "A":
connAttrs=A;
break;
case "B":
connAttrs=B;
break;
case "C":
connAttrs=C;
break;
default:
connAttrs=D;
}
oracledb.getConnection(connAttrs, function (e, connection) {
connection.execute(callout.query, {}, {
outFormat: oracledb.OBJECT
}, function (e, result) {
//Sparing the details here, run oracle query and save to mongodb
doRelease(connection);
});
});
callback();
}发布于 2017-01-12 22:40:03
我认为简单的答案是,您的回调(从队列中传递)在错误的位置。在那个时候调用回调就像告诉队列,“嘿,做完那件事,下一步!”
直到您在Oracle中提交了工作并释放了连接之后,您才真正完成了“标注”的处理。尝试在传递给connection.release或connection.close的回调中调用回调(无论使用哪种方式)。
以下是一些其他的提示/建议:
https://stackoverflow.com/questions/41622857
复制相似问题