为什么要使用`eventEmitter`而不是`promise`?

6

我在阅读一本书时找到了下面的例子:

function User() {
    EventEmitter.call(this);
    this.addUser = function (username, password) {
        // add the user
        // then emit an event
        this.emit("userAdded", username, password);
    };
}

var user = new User();
var username = "colin";
var password = "password";

user.on("userAdded", function(username, password) {
    console.log("Added user " + username);
});

user.addUser(username, password);

我认为在这里使用EventEmitter完全是多余的。使用Promises会更好:

function User() {
    this.addUser = function (username, password) {
        return new Promise(function (resolve) {
            // add the user
            // and resolve
            resolve();
        });
    };
}

使用方式:

user.addUser(username, password).then(function(username, password) {
    console.log("Added user " + username);
});
< p >使用EventEmitter是否比使用Promises更有优势,还是只是在Promises不可用时使用的代码?或者这种风格在node.js中不受欢迎?


1
如果您希望在添加多个具有相同处理程序的用户时收到通知,怎么办?Promise不适用于此情况。一个 Promise 只能解析一次。 - ste2425
1
就我而言,EventEmitter和Promise之间的主要区别在于,Promise只能被履行一次,而事件可以被触发任意次数。 - Denis Lisitskiy
2个回答

10

EventEmitter和Promise之间的主要区别在于,Promise只能被履行一次,而事件可以被触发任意多次。


-1

我不明白丹尼斯所写的情况何时会变成现实。每次调用addUser,都会返回一个新的promise。在事件驱动逻辑中,会触发一个新事件。 我看到的主要区别是promise更高效(根据我的经验),但有点“局部”。您从调用方法的位置有一个单一的线性路径。而使用事件时,您可以让多个其他组件监听事件。因此,每次添加用户时,所有这些组件都会收到通知并运行它们的逻辑。另一件事是,使用事件可以定义一次发生的内容,然后无论调用触发事件的方法的位置在哪里,事件侦听器回调都会触发。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Albert Logic Einstein
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Vendetta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接