@nxtedition/deepstream.io-client-js 23.4.23 → 23.4.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/record/record-handler.js +5 -5
- package/src/utils/utils.js +42 -0
package/package.json
CHANGED
|
@@ -393,11 +393,6 @@ class RecordHandler {
|
|
|
393
393
|
let prevData = kEmpty
|
|
394
394
|
|
|
395
395
|
const onUpdate = (record) => {
|
|
396
|
-
if (signal?.aborted) {
|
|
397
|
-
o.error(new utils.AbortError())
|
|
398
|
-
return
|
|
399
|
-
}
|
|
400
|
-
|
|
401
396
|
if (state && record.state < state) {
|
|
402
397
|
return
|
|
403
398
|
}
|
|
@@ -443,8 +438,13 @@ class RecordHandler {
|
|
|
443
438
|
onUpdate(record)
|
|
444
439
|
}
|
|
445
440
|
|
|
441
|
+
const abort = signal ? () => o.error(new utils.AbortError()) : null
|
|
442
|
+
|
|
443
|
+
utils.addAbortListener(signal, abort)
|
|
444
|
+
|
|
446
445
|
return () => {
|
|
447
446
|
record.unsubscribe(onUpdate).unref()
|
|
447
|
+
utils.removeAbortListener(signal, abort)
|
|
448
448
|
}
|
|
449
449
|
})
|
|
450
450
|
}
|
package/src/utils/utils.js
CHANGED
|
@@ -127,3 +127,45 @@ module.exports.AbortError = class AbortError extends Error {
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
module.exports.schedule = isNode ? setImmediate : window.requestIdleCallback
|
|
130
|
+
|
|
131
|
+
const abortSignals = new WeakMap()
|
|
132
|
+
const onAbort = function () {
|
|
133
|
+
const handlers = abortSignals.get(this)
|
|
134
|
+
if (handlers) {
|
|
135
|
+
for (const handler of handlers) {
|
|
136
|
+
handler()
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
module.exports.addAbortListener = function addAbortListener(signal, handler) {
|
|
142
|
+
if (!signal) {
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
let handlers = abortSignals.get(signal)
|
|
147
|
+
if (!handlers) {
|
|
148
|
+
handlers = []
|
|
149
|
+
abortSignals.set(signal, handlers)
|
|
150
|
+
signal.addEventListener('abort', onAbort)
|
|
151
|
+
}
|
|
152
|
+
handlers.push(handler)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
module.exports.removeAbortListener = function removeAbortListener(signal, handler) {
|
|
156
|
+
if (!signal) {
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const handlers = abortSignals.get(signal)
|
|
161
|
+
if (handlers) {
|
|
162
|
+
const index = handlers.indexOf(handler)
|
|
163
|
+
if (index !== -1) {
|
|
164
|
+
handlers.splice(index, 1)
|
|
165
|
+
if (handlers.length === 0) {
|
|
166
|
+
abortSignals.delete(signal)
|
|
167
|
+
signal.removeEventListener('abort', onAbort)
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|