具有条件的节点事件发射器

时间:2016-01-17 15:39:58

标签: javascript node.js promise bluebird eventemitter

我有节点应用程序,当我可以运行其他逻辑时会引发事件,例如server.js会在它启动时发出事件(例如......),然后我有逻辑应该在此事件之后运行被提出

第一个文件

  

server.js - > runProcess - >完成 - >发出事件

secondFile

  

听取事件 - >运行新流程

问题是firstFile / server.js只运行一次而 secondFile可以多次所以第一次它工作正常但是第二次事件丢失且代码不会被称为......

这里将首次调用它,我需要在事件可用时第一次调用它

但是可以多次调用第二个文件中的 proxy.web 所以在第二次失败,因为事件不再从第一个未被调用的文件中提出......,我怎么能克服这个?

 Actions.eventEmitter.on('Available', function () {
            proxy.web(req, res, {
                target: 'http://' + hostname + ':' + appPort
            });

    })

1 个答案:

答案 0 :(得分:0)

您可以使用promises来解决这个问题。 在server.js中添加此代码。

Actions.promiseAvailable = new Promise(function(resolve, reject) {
  Actions.eventEmitter.on('Available', function() {
    resolve();
  });
});

然后在第二个文件中,您可以执行此操作

Actions.promiseAvailable.then(function() {
  //doSomething
});

缺点是你必须为你可以得到的每种类型的事件添加另一种方法。