私は約40のOracle接続/照会を実行するnodejsアプリケーションを持っています。私はasyncを使用して、proposed solution hereからの非同期呼び出しを制限しています。私の問題は、関数/クエリが完了する前にドレインコールバックが実行され、完了していることです。どんな助けでも大歓迎です。完了までのNodejs非同期コール・コール・コールバック
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();
}
ようこそStackOverflow。 'oracledb.getConnection'の呼び出しが非同期で終了する可能性はありますか?もしそうなら、 'runAsyncCallout'が起動し、' oracledb.getConnection'を呼び出すと、それが実行されますが、その間に 'runAsyncCallout'は引き続き実行され、実際のクエリが実行される前に呼び出し元に戻ります。 – akousmata