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を「that」に入れることができないことです。なにか提案を?ありがとう。

4

1 に答える 1

1

問題は、asyncblockに渡された関数が実行される直前にconnect関数が戻ることです。これは、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
}
于 2012-08-04T07:50:13.980 に答える