私はNodeJSでExpressを使用してアプリケーションを作成し、EventEmitterを使用して、発行されたイベントをリッスンすることでプラグインがメインコードにフックする一種のプラグインアーキテクチャを作成しようとしています。
私の問題は、プラグイン関数が非同期リクエストを行うときに発生します(この場合はmongoからデータを取得するため)。これにより、プラグインコードが終了し、元のエミッターに制御が戻り、プラグインコードの非同期リクエストの前に実行が完了します。終了します。
例えば:
メインアプリ:
// We want to modify the request object in the plugin
self.emit('plugin-listener', request);
プラグイン:
// Plugin function listening to 'plugin-listener', 'request' is an arg
console.log(request);
// Call to DB (async)
this.getFromMongo(some_data, function(response){
// this may not get called until the plugin function has finished!
}
'getFromMongo'関数からメインコードに戻るコールバック関数を回避する理由は、イベントをリッスンしているプラグインが0個または多数ある可能性があるためです。理想的には、メインアプリに制御を戻す前に、DBのものが終了するのを待つ方法が必要です。
どうもありがとう