diff --git a/lib/eventsource/eventsource.js b/lib/eventsource/eventsource.js index d940f236f93..ee61cfde880 100644 --- a/lib/eventsource/eventsource.js +++ b/lib/eventsource/eventsource.js @@ -1,6 +1,5 @@ 'use strict' -const { setTimeout } = require('node:timers/promises') const { pipeline } = require('node:stream') const { fetching } = require('../fetch') const { makeRequest } = require('../fetch/request') @@ -11,6 +10,7 @@ const { parseMIMEType } = require('../fetch/dataURL') const { MessageEvent } = require('../websocket/events') const { isNetworkError } = require('../fetch/response') const { getGlobalDispatcher } = require('../global') +const { delay } = require('./util') let experimentalWarned = false @@ -344,7 +344,7 @@ class EventSource extends EventTarget { this.dispatchEvent(new Event('error')) // 2. Wait a delay equal to the reconnection time of the event source. - await setTimeout(this.#settings.reconnectionTime, { ref: false }) + await delay(this.#settings.reconnectionTime) // 5. Queue a task to run the following steps: diff --git a/lib/eventsource/util.js b/lib/eventsource/util.js index a87cc834eca..727d8660e5f 100644 --- a/lib/eventsource/util.js +++ b/lib/eventsource/util.js @@ -23,7 +23,15 @@ function isASCIINumber (value) { return true } +// https://github.com/nodejs/undici/issues/2664 +function delay (ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms).unref() + }) +} + module.exports = { isValidLastEventId, - isASCIINumber + isASCIINumber, + delay }