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

时间:2016-12-14 10:52:28

标签: javascript node.js promise eventemitter

我在一本书中找到了以下例子:

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在这里完全是多余的。承诺会做得更好:

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);
});

使用EventEmitter是否比使用Promises有任何优势,或者仅仅是Promise不可用时的代码?或者node.js不欢迎这种风格?

1 个答案:

答案 0 :(得分:7)

EventEmitter和Promise之间的主要区别在于,Promise只能实现一次,而事件可以被触发任意次数