这是我的代码。
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变成'那个'。有什么建议吗?感谢。
答案 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
}