NodeJS中的事件,事件正在setInterval中发出,但不是没有setInterval

时间:2016-04-10 13:34:04

标签: node.js javascript-events eventemitter

我是JavaScript和NodeJS的新手,我只是想了解NodeJS中的发射器模式。当我尝试每秒发出一个tick事件时,使用setInterval函数,该程序似乎工作正常: -

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

        var Ticker = function() {
          var self = this;
          setInterval(function() {
            self.emit('tick');
          }, 1000);
        };

        util.inherits(Ticker, EventEmitter)

        var ticker = new Ticker();
        ticker.on('tick', function() {
          console.log('TICK');
        });

但是,当我尝试不使用setInterval方法发出事件时,我的事件没有被调用: -

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

        var Ticker = function() {
          var self = this;
          self.emit('tick');
        };

        util.inherits(Ticker, EventEmitter)

        var ticker = new Ticker();
        ticker.on('tick', function() {
          console.log('TICK');
        });

请帮助,我不明白,我错了... 据我所知,当调用self.emit时,ticker.on未注册,因此错过了事件。如果是这种情况,如何在创建对象时发出事件。

1 个答案:

答案 0 :(得分:0)

JavaScript是一种(主要是*)同步语言,除非另有说明,代码从上到下运行,只有异步事件排队等待以后。

如果没有setInterval将emit()排队等待以后,你可以这样:

create Ticker
Ticker.emit()
Ticker.on(...)

基本上,.emit()同步发生,并且在第一次调用.on()之前发生。

*主要是因为在ES2015中我们有Promises,它是用于描述异步事物的语言级构造,但对于您正在观察的问题并不重要。

相关问题