我使用node&#39的EventEmitter
为我的应用程序编写了一个简单的事件调度程序我有很多活动,一切都很好,除了一个,我不知道为什么承诺或回调永远不会完成
这是调度员的代码
var EventEmitter = require('events').EventEmitter,
RequireTree = require('require-tree'),
_ = require('lodash');
module.exports = {
init: function(options) {
var self = this;
_.extend(options, {
excludes: []
});
if (!options.path) {
throw new Error('You must specify the `path` option');
}
self.Emitter = self.Emitter || new EventEmitter();
// Require all files in this directory
RequireTree(options.path, {
filter: filterModels,
each: loadModels
});
function filterModels(filename) {
return options.excludes.indexOf(filename) === -1;
}
function loadModels(model) {
Object.keys(model).forEach(function(key) {
self.Emitter.on(key, model[key]);
});
}
return this;
}
};
当我的应用程序启动时,我打电话给调度员
dispatcher.init({
path: __dirname + '/events'
});
有问题的事件
events/send_emails.js
var Mandrill = require('mandrill-api/mandrill').Mandrill;
modules.exports = {
'send:email': function() {
var mandrill = new Mandrill('apikey', true);
var message = {
html: '<h1>Hello email</>',
from_email: 'info@example.com',
from_name: "Example",
subject: "Example mail",
to: [{
email: 'my@email.com'
}],
headers: {
'Reply-To': "info@example.com"
}
};
var cb = function(a) { console.log("PRINT SOME", a); }
mandrill.messages.send({message: message, async: false, ip_poll: 'Main Pool'}, cb, cb);
}
};
当我的应用程序发出send:mail
事件时,会调用该函数,但PRINT SOME
消息永远不会显示在控制台中
我在一个简单的脚本中测试函数send:mail
var events = require('./events');
events['send:email']();
调用命令
$ node test/index.js
和工作!!!!我在控制台上看到了消息PRINT SOME
我不明白我的代码与事件调度程序有什么问题
我有其他事件,他们编写文件,在数据库上存储记录,并且必定会调用其他API
另外,我写了一个粗略的方法,使用superagent作为回报承诺
var request = require('superagent-bluebird-promise');
request
.post('https://mandrillapp.com/api/1.0/messages/send.json')
.send({message: ...}).then(..).catch(...);
.then
和.catch
方法从未被称为