传递nodejs asynblock数据

时间:2012-08-04 01:44:52

标签: node.js synchronize

这是我的代码。

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变成'那个'。有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

问题是你的connect函数在为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
}