Skip to content

strange befavior about console.err,console.log on win10 #18232

Closed
@godhand4826

Description

@godhand4826
  • 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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    consoleIssues and PRs related to the console subsystem.questionIssues that look for answers.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions