-
-
Notifications
You must be signed in to change notification settings - Fork 34.7k
Closed
Labels
consoleIssues and PRs related to the console subsystem.Issues and PRs related to the console subsystem.questionIssues that look for answers.Issues that look for answers.
Description
- Version:v8.4.0
- Platform: 64-bit (Windows10)
- Subsystem:
Stackoverflow: a strange behavior about the EventEmitter in node
I am learning EventEmitter. and I have a simple stupid test. (node --version v8.4.0 on win10)
const EventEmitter = require('events');
const emiter1 = new EventEmitter()
const emiter2 = new EventEmitter()
// let cnt = 1
emiter1.on('ping', () => {
// console.log('ping' + cnt++)
emiter2.emit('pong')
})
emiter2.on('pong', () => {
// console.log('pong' + cnt++)
emiter1.emit('ping')
})
emiter1.emit('ping')I expect it will become a infinity function call, because emit() is a sync function.
Here is the output.:
$ node em.js
C:\tmp\em.js:13
emiter2.on('pong', () => {
^
RangeError: Maximum call stack size exceeded
at EventEmitter.emiter2.on (C:\electron-workspace\tmp\em.js:13:24)
at emitNone (events.js:105:13)
at EventEmitter.emit (events.js:207:7)
at EventEmitter.emiter1.on (C:\electron-workspace\tmp\em.js:10:17)
at emitNone (events.js:105:13)
at EventEmitter.emit (events.js:207:7)
at EventEmitter.emiter2.on (C:\electron-workspace\tmp\em.js:15:17)
at emitNone (events.js:105:13)
at EventEmitter.emit (events.js:207:7)
at EventEmitter.emiter1.on (C:\electron-workspace\tmp\em.js:10:17)
Great! Just as I expected. But after I uncomment the cnt and console.log, I got a strange behavior. The program finished without an error, and stop at cnt==1600 (sometime is 1598, 1599)
$ node em.js
ping1
pong2
ping3
pong4
...
...
pong1596
ping1597
pong1598
ping1599
pong1600
$
Finally, I run node em.js 1> out.txt 2> err.txt and both console.log and console.err are correct just as I expect. But I'm still wondering why the err didn't print out directly in my shell?
Is there a reasonable explanation?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
consoleIssues and PRs related to the console subsystem.Issues and PRs related to the console subsystem.questionIssues that look for answers.Issues that look for answers.