2017-08-10 6 views
0

たとえば、私は2つのサービスを持っています:dbとキュー dbの後にサーバを起動し、amqpがサーバに接続する必要があります。今のすべてのサービスが開始された後にstart node.js app

私はこのserver.jsのようなものがあります。

let mongo = require('./server/db'); 
let qManager = require('./server/amqp'); 

mongo.connect(()=>{ 
    qManager.connect(()=>{ 
     http.listen(3001, function() { 
      console.log('listening on *:3001'); 
     }); 
    }); 
}); 

Mongoの接続方法:

const connectDb = (callback) => { 
    if (state.db) return state.db; 
    let connection = MongoClient.connect(mongoUrl, (err, db) => { 
     if (err) { 
      connectDb(); 
     } 
     state.db = db; 
     console.log('Mongo connected.'); 
     callback(); 
    }); 
}; 

RabbitMQの接続方法:

const connect = (callback) => { 
    connection = amqp.connect(url) 
     .then(conn => { 
      module.connection = conn; 
      channel = conn.createChannel(); 
      console.log('Queue connected.'); 
      pythonResultListener(); 

      callback() 
     }) 
     .catch(err => { 
      console.error('Connect failed: %s', err); 
     }); 
    return connection; 
}; 

は多分あまりがありますもっといい方法?ありがとう。

答えて

0

非同期フローを処理する方法はいくつかあります。あなたの特定のケースでは :

  • async.waterfall

  • 約束は近づい

  • ジェネレーター/コルーチン

  • 非同期/待つ

非常に迅速エクサmple async/awaitと:

// First you modify your callback function to be promises 
// For example mongoconnect method implementation: 
const connectDb = function() { 
    return new Promise (resolve, reject) => { 
    if (state.db) return state.db; 
    let connection = MongoClient.connect(mongoUrl, (err, db) => { 
     if (err) return reject(err); 
     state.db = db; 
     console.log('Mongo connected.'); 
     resolve(); 
    }); 
    }); 
}; 

そして今、あなたが約束A、B、Cを持っていると仮定すると、あなたの目標は一つずつそれらを呼び出すことです:あなたはhere見つけることができます

const promises = [ A, B, C ]; 
for (const promiseFunc of promises) { 
    const res = await promiseFunc(); 
    // For cases you need to return something 
    console.log(res); 
} 

詳細情報を。

0

あなたはそれをうまくやっています。サーバーを起動する前に、すべてのinitロジックを配置してください。すべてのinitが完了するまでサーバを起動しないでください。

モジュール化することで、個別の初期化をそれぞれのモジュールに配置できます。あなたはそれらをうまく管理することができます。

関連する問題