首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >完成前的Nodejs异步调用漏回回调

完成前的Nodejs异步调用漏回回调
EN

Stack Overflow用户
提问于 2017-01-12 20:58:55
回答 1查看 829关注 0票数 1

我有一个nodejs应用程序,它运行大约40个oracle连接/查询。我使用异步限制来自这里提出的解决方案的异步调用。我的问题是在函数/查询完成之前,排水回调正在运行和完成。任何帮助都非常感谢。

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 22:40:03

我认为简单的答案是,您的回调(从队列中传递)在错误的位置。在那个时候调用回调就像告诉队列,“嘿,做完那件事,下一步!”

直到您在Oracle中提交了工作并释放了连接之后,您才真正完成了“标注”的处理。尝试在传递给connection.releaseconnection.close的回调中调用回调(无论使用哪种方式)。

以下是一些其他的提示/建议:

  1. 从一次性连接切换到连接池。驱动程序现在支持内部池缓存中的多个命名池,因此它非常容易使用。
  2. 从多次往返切换到批量处理。当然,根据您使用JavaScript和PL/SQL的经验,这个示例要复杂得多,但如果您愿意,我可以提供一个示例。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41622857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档