【发布时间】:2015-08-11 21:13:10
【问题描述】:
我刚刚被介绍到 node.js 的 EventEmitters,并且喜欢代码的结构方式,而不是回调,甚至使用诸如异步之类的库。当有一个简单的工作流程时,我完全了解基础知识,即:
this.register = function(email, pass, confirm) {
var newCustomer = {email:email, pass:pass, confirm: confirm};
this.emit("newRegistration", newCustomer);
};
var _validate = function(customer{
this.emit("validated", customer);
};
//...
this.on("newReigstration", _validate);
this.on("validated", _insert);
非常有道理。我的问题是如何处理通常调用的函数。例如,我可能有 50 个端点,其中传递了一个客户 ID,我需要将客户从数据库中取出,如下所示:
Customer.getCustomer(customerId, function(err, customer) {
// Got the customer, now go do something.
});
我不能只将事件与获取客户的行为联系起来,因为在“获得客户”之后有 50 件不同的事情要做。所以我不能做这样的事情:
this.on("customerRetrieved", task1);
this.on("customerRetrieved", task2);
this.emit("customerRetrieved", customer); // In getCustomer
因为两者都会被调用,而我每次只想调用一个。我唯一能想到的就是做这样的事情:
this.on("customerRetrievedForTask1", task1);
this.on("customerRetrievedForTask2", task2);
但这看起来很笨拙,更不用说如果我不小心给它取了与已经存在的东西相同的名字是危险的。这些常用函数的约定是什么?
【问题讨论】:
-
每个客户 (id) 使用一个事件发射器。呃,真的没有;事件发射器只是不适合返回某事(而不是 doing 某事)的函数的模式。你会想看看 Promise。
标签: javascript node.js eventemitter