Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
tsctx committed Apr 28, 2024
1 parent 948d332 commit 678620c
Showing 1 changed file with 22 additions and 25 deletions.
47 changes: 22 additions & 25 deletions lib/api/abort-signal.js
@@ -1,9 +1,8 @@
const { addAbortListener } = require('../core/util')
const { RequestAbortedError } = require('../core/errors')

const kListenersList = Symbol('kListenersList')
const kSignal = Symbol('kSignal')
const kListenerList = Symbol('kListenersList')
const kHandler = Symbol('kHandler')

function abort (self) {
if (self.abort) {
Expand All @@ -14,20 +13,26 @@ function abort (self) {
removeSignal(self)
}

function handleAbort (signal) {
for (const listener of signal[kListenersList]) {
abort(listener)
}
clearListeners(signal)
}

function clearListeners (signal) {
const listenerList = signal[kListenerList]
if (!listenerList) {
if (!signal[kListenersList]) {
return
}
if ('removeEventListener' in signal) {
signal.removeEventListener('abort', signal[kHandler])
signal.removeEventListener('abort', handleAbort)
} else {
signal.removeListener('abort', signal[kHandler])
signal.removeListener('abort', handleAbort)
}
if (listenerList.size !== 0) {
listenerList.clear()
if (signal[kListenersList].size !== 0) {
signal[kListenersList].clear()
}
signal[kListenerList] = null
signal[kListenersList] = null
}

function addSignal (self, signal) {
Expand All @@ -46,31 +51,23 @@ function addSignal (self, signal) {

self[kSignal] = signal

if (!signal[kListenerList]) {
signal[kListenerList] = new Set()
signal[kHandler] = () => {
for (const listener of signal[kListenerList]) {
abort(listener)
}
clearListeners(signal)
}
addAbortListener(signal, signal[kHandler])
if (!signal[kListenersList]) {
signal[kListenersList] = new Set()
addAbortListener(signal, handleAbort)
}

signal[kListenerList].add(self)
signal[kListenersList].add(self)
}

function removeSignal (self) {
const signal = self[kSignal]

if (!signal) {
if (!self[kSignal]) {
return
}

signal[kListenerList].delete(self)
self[kSignal][kListenersList].delete(self)

if (signal[kListenerList].size === 0) {
clearListeners(signal)
if (self[kSignal][kListenersList].size === 0) {
clearListeners(self[kSignal])
}

self[kSignal] = null
Expand Down

0 comments on commit 678620c

Please sign in to comment.