0

这是我的代码。

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 进入“那个”。有什么建议吗?谢谢。

4

1 回答 1

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
}

连接.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
}
于 2012-08-04T07:50:13.980 回答