2012-08-04 27 views
0

這裏是我的代碼。傳遞nodejs asynblock數據

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同步我的代碼,問題是我不能讓分貝到「說」。任何建議?謝謝。

回答

1

問題是,你的連接函數在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 
} 
+0

我不是很明白,你可以爲此提供了一個簡單的例子嗎?謝謝。 – rizpng 2012-08-04 11:29:58

+0

我爲我的答案附加了一個示例,假設您定義了一個node.js模塊,並從您的代碼的條目文件中調用它。現在清楚嗎? – levram 2012-08-04 21:01:06