nodejs / node

Node.js JavaScript runtime ✨🐢🚀✨
https://nodejs.org
Other
106.44k stars 29.01k forks source link

fetch errors when providing an abort signal #46823

Open tatethurston opened 1 year ago

tatethurston commented 1 year ago

Version

18.14.2

Platform

Darwin c889f3b32dab 22.3.0 Darwin Kernel Version 22.3.0: Mon Jan 30 20:38:37 PST 2023; root:xnu-8792.81.3~2/RELEASE_ARM64_T6000 arm64 arm Darwin

Subsystem

No response

What steps will reproduce the bug?

Providing an instance of AbortSignal to fetch:

fetch("some url", { signal: AbortSignal.timeout(1500) })

How often does it reproduce? Is there a required condition?

Always

What is the expected behavior?

Using fetch's signal does not error. This is the behavior in 18.14.0.

What do you see instead?

An error is raised:

The "emitter" argument must be an instance of EventEmitter or EventTarget. Received an instance of AbortSignal

Additional information

Related issues:

tatethurston commented 1 year ago

Looking through the linked issues, the underlying issue seems to be fixed and this will be resolved when node 18.14.3 is available. Posting this primarily to save someone else some debugging and searching cycles.

tatethurston commented 1 year ago

Digging in further here, this only reproduces with nextjs on v 18.14.2. I'll follow up over there.

camsjams commented 1 year ago

This occurs when using Node 18.14.2 or greater, not just on nextjs.

See also https://github.com/nodejs/undici/pull/1910#issuecomment-1478348166

Can you reopen please @tatethurston

aduh95 commented 1 year ago

Do you still see the issue on v18.16.0?

benjamingr commented 1 year ago

An AbortSignal is an EventTarget - are you using the built in AbortSignal or something else?

houfeng0923 commented 10 months ago

v18.15.0 has. it caused the cases related fetch can't pass. v20.9 is ok