Skip to content

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

@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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions