gpt4 book ai didi

javascript - NodeJS 中的事件,在 setInterval 内发出事件,但在没有 setInterval 时则不会发出事件

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:11 27 4
gpt4 key购买 nike

我对 JavaScript 和 NodeJS 非常陌生,我只是想了解 NodeJS 中的发射器模式。当我尝试使用 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 未注册,因此事件被错过。如果是这种情况,如何在创建对象时发出事件?

最佳答案

JavaScript 是一种(大部分*)同步语言,除非另有说明,代码从上到下运行,并且只有异步事件会排队等待稍后。

没有 setInterval 排队 emit()稍后,你会得到这样的东西:

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

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

<小时/>

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

关于javascript - NodeJS 中的事件,在 setInterval 内发出事件,但在没有 setInterval 时则不会发出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com