Skip to content
This repository was archived by the owner on Apr 22, 2023. It is now read-only.
This repository was archived by the owner on Apr 22, 2023. It is now read-only.

Emit errors consistently #4897

Closed
Closed
@isaacs

Description

@isaacs

Throughout the codebase, there are some cases where we emit('error') right away on some user action, and other cases where we defer the error emit call until nextTick.

For example, Writable streams emit the error right away if you call write(chunk) after calling end(). However, there are many other cases where the error is deferred until nextTick (qv almost every error in lib/net.js).

On the one hand, you already have the object if you're calling write() on it, so you've had a chance to add an error listener. On the other hand, actual write() errors (EPIPE, etc.) usually don't happen synchronously, so it's odd to sometimes have to put the listener on before calling write() and other times not.

Since we can't make all errors synchronous, for obvious reasons, we may as well make all errors async, and defer emit('error', er) calls until nextTick. The throw site is already garbage, since it throws from inside events.js, so there's really no cost to deferring consistently.

At least, these probably need fixing:

  • lib/_stream_* (especially writable)
  • lib/fs.js (not sure if it's actually in there, but there is at least a test verifying that write-after-end throws)
  • dgram.js maybe
  • tls.js
  • Several tests

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions