【问题标题】:passing nodejs asynblock data传递nodejs异步块数据
【发布时间】:2012-08-04 01:44:51
【问题描述】:

这是我的代码。

exports.connect = function(){
    var that = null;
    var client = new mongo.Db(ih.cfg.db.name, new mongo.Server(ih.cfg.db.host, ih.cfg.db.port, {auto_reconnect: true}));

    asyncblock(function(flow){
        client.open(flow.add('db'));
        var db = flow.wait('db');
        that = db;
    });

    return that
}

我正在使用 asynblock 来同步我的代码,问题是我无法让 db 进入“那个”。有什么建议吗?谢谢。

【问题讨论】:

    标签: node.js synchronize


    【解决方案1】:

    问题是您的连接函数在传递给 asyncblock 的函数运行之前立即返回 - 因为您传递给 asyncblock 的回调是异步调用的。 它只能在传递给 asyncblock 的这些回调函数中同步您的代码。

    解决方法可以是在外部调用asyncblock,将流对象传递给这个模块。

    例如: 主文件:

    var connect = require("./connect.js") // the file with your code in your question
    , asyncblock = require("asyncblock");
    
    asyncblock(function(flow)) {
      db = connect(flow);
      // rest of your code using db connection
    }
    

    connect.js:

    exports.connect = function(flow){
        var client = new mongo.Db(ih.cfg.db.name, new mongo.Server(ih.cfg.db.host, ih.cfg.db.port, {auto_reconnect: true}));
        client.open(flow.add('db'));
        var db = flow.wait('db');
        return db
    }
    

    【讨论】:

    • 我不太明白,你能提供一个简单的例子吗?谢谢。
    • 我为我的答案附加了一个示例,假设您正在定义一个 node.js 模块,并从代码的入口文件中调用它。现在清楚了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2015-10-30
    • 2015-12-01
    • 2014-06-19
    • 2021-10-12
    相关资源
    最近更新 更多