Events Node.js事件处理顺序

Events Node.js事件处理顺序,events,node.js,Events,Node.js,给定中的某些实例,是否绝对保证所有事件都将按照代码中出现的顺序进行处理 var EventEmitter = require('events').EventEmitter; var inherits = require('util').inherits; var Emitter = function () { EventEmitter.call(this); var that = this; this.test = function () {

给定中的某些实例,是否绝对保证所有事件都将按照代码中出现的顺序进行处理

var EventEmitter = require('events').EventEmitter;
var inherits = require('util').inherits;

var Emitter = function () {
    EventEmitter.call(this);
    var that = this;
    this.test = function () {            
        that.emit('eventA');
        that.emit('eventB');
    }
};
inherits(Emitter, EventEmitter);

var emitter = new Emitter();

emitter.on('eventA', function () {
    doTaskA();
});

emitter.on('eventB', function () {
    doTaskB();
});

emitter.test();

是否会出现这样一种情况,即
doTaskB()
将在
doTaskA()
之前启动?

是的,所有事件将按照它们在代码中出现的顺序进行处理。事件在发出调用后立即激发。您可以在EventEmmiter.emit中看到它。但是,将应用程序逻辑绑定到事件顺序并不是最好的方法。

这不是一种很好的编程方法。事件按指定的顺序触发,是的,但这并不一定意味着taskA将在taskB之前完成,或者taskB被触发时taskA已完成。要防止这种情况发生,请使用流控制库,如或其中一个。我正在从async切换到invoke..@japrescott的过程中,我还建议将它们放在列表中。定义它们也应该按那个顺序,所以这意味着实现更改不会改变这一点。