【问题标题】:Evented api and/or callback api in nodejsnodejs中的事件api和/或回调api
【发布时间】:2014-02-11 18:48:08
【问题描述】:

我想知道处理事件 api 的最佳方法是什么。我的第一个想法是将它包装到回调 api 中,但我觉得我在这里被阻塞了,这不是最好的方法。

假设我有一个从数据库返回值的库并且它是事件:

var connection = new Connection(config);
 var query = new Query();
 query.on('data',function(row){});
 query.on('done',function(){});

这是我的看法……

 getAllCustomer(clb){

    var connection = new Connection(config);
    var query = new Query();
    var results = [];

    query.on('data',function(row){
        results.push(row);
    });
    query.on('done',function(){

        clb(results);

    });

    connection.execute(query);
    connection.close();
 }

我想在 hapijs 或 expressjs 应用中使用它

喜欢这样使用

 handler: function(request,reply){

    getAllCustomer(function(err,result){
        reply(result);
    });
 }

getAllCustomers() 似乎在查询完成之前一直处于阻塞状态! 那么推荐的处理方法是什么? 将事件 api 包装在回调 api 中的设计决策是否正确? 或者我应该将流式行与 expressjs / hapijs 一起传递吗? 所以我正在寻找一种最佳实践方式......节点方式......

感谢您的帮助。

【问题讨论】:

    标签: javascript node.js asynchronous callback


    【解决方案1】:

    在您提供的代码示例中,getAllCustomers() 将阻塞,仅当 connection.execute(query) 阻塞时 - 似乎是这种情况,否则如果它是异步的 - 它将被随后调用 @987654323 关闭@ 在它甚至有机会运行查询之前。 如果它不是同步/阻塞 - 你需要在 done 回调中关闭连接

    【讨论】:

    • 我现在将 api 更改为 don 回调中的 close call 并且看起来更好,...谢谢!
    猜你喜欢
    • 2021-09-10
    • 2017-02-15
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多