MCPcopy Index your code
hub / github.com/nodejs/node / abortSignal

Function abortSignal

lib/internal/abort_controller.js:492–540  ·  view source on GitHub ↗
(signal, reason)

Source from the content-addressed store, hash-verified

490
491// https://dom.spec.whatwg.org/#dom-abortsignal-abort
492function abortSignal(signal, reason) {
493 // 1. If signal is aborted, then return.
494 if (signal[kAborted]) return;
495
496 // 2. Set signal's abort reason to reason if it is given;
497 // otherwise to a new "AbortError" DOMException.
498 signal[kAborted] = true;
499 signal[kReason] = reason;
500
501 // 3. Let dependentSignalsToAbort be a new list.
502 const dependentSignalsToAbort = ObjectSetPrototypeOf([], null);
503
504 // 4. For each dependentSignal of signal's dependent signals:
505 signal[kDependantSignals]?.forEach((s) => {
506 const dependentSignal = s.deref();
507 // 1. If dependentSignal is not aborted, then:
508 if (dependentSignal && !dependentSignal[kAborted]) {
509 // 1. Set dependentSignal's abort reason to signal's abort reason.
510 dependentSignal[kReason] = reason;
511 dependentSignal[kAborted] = true;
512 // 2. Append dependentSignal to dependentSignalsToAbort.
513 ArrayPrototypePush(dependentSignalsToAbort, dependentSignal);
514 }
515 });
516
517 // 5. Run the abort steps for signal
518 runAbort(signal);
519
520 // 6. For each dependentSignal of dependentSignalsToAbort,
521 // run the abort steps for dependentSignal.
522 for (let i = 0; i < dependentSignalsToAbort.length; i++) {
523 const dependentSignal = dependentSignalsToAbort[i];
524 runAbort(dependentSignal);
525 }
526
527 // Clean up the signal from gcPersistentSignals
528 gcPersistentSignals.delete(signal);
529
530 // If this is a composite signal, also remove all of its source signals from gcPersistentSignals
531 // when they get dereferenced from the signal's kSourceSignals set
532 if (signal[kComposite] && signal[kSourceSignals]) {
533 signal[kSourceSignals].forEach((sourceWeakRef) => {
534 const sourceSignal = sourceWeakRef.deref();
535 if (sourceSignal) {
536 gcPersistentSignals.delete(sourceSignal);
537 }
538 });
539 }
540}
541
542// To run the abort steps for an AbortSignal signal
543function runAbort(signal) {

Callers 6

refreshCompositeSignalFunction · 0.85
followCompositeSignalFunction · 0.85
anyMethod · 0.85
[kDeserialize]Method · 0.85
abortMethod · 0.85

Calls 3

runAbortFunction · 0.85
forEachMethod · 0.65
deleteMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…