Stu*_*art 9 events node.js express eventemitter
我有和NodeJS用Express编写的应用程序,我试图使用EventEmitter创建一种插件架构,插件通过监听发出的事件挂钩到主代码中.
我的问题来自插件函数发出异步请求(在这种情况下从mongo获取数据)这导致插件代码完成并将控制权返回到原始发射器,然后在插件代码中的异步请求之前完成执行饰面.
例如:
主要应用:
// We want to modify the request object in the plugin
self.emit('plugin-listener', request);
Run Code Online (Sandbox Code Playgroud)
插入:
// 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!
}
Run Code Online (Sandbox Code Playgroud)
我从"getFromMongo"函数回避主代码的回调函数的原因是可能有0个或多个插件监听事件.理想情况下,我想在将控制权返回给主应用程序之前等待数据库内容完成
非常感谢
小智 5
使用 EventEmitter 进行插件/中间件管理并不理想,因为如果侦听器具有异步代码,则无法确保它们按顺序执行。当这些侦听器彼此交互或相同的数据时,这尤其是一个问题。
这就是为什么 ie connect/express 中间件函数被存储在一个数组中并一个接一个地执行,而不是使用 EventEmitter;他们每个人都需要调用一个 next(); 在他们完成任务时发挥作用。