composite-abort-controller

abort controller and abort signal classes that compose multiple abort signals

Usage no npm install needed!

<script type="module">
  import compositeAbortController from 'https://cdn.skypack.dev/composite-abort-controller';
</script>

README

CompositeAbortController

abort controller and abort signal classes that compose multiple abort signals

Installation

npm i --save composite-abort-controller

Usage

Supports both ESM and CommonJS

// esm
import CompositeAbortController from 'composite-abort-controller'
// commonjs
const CompositeAbortController = require('composite-abort-controller').default

Example 1: Compose AbortSignals into one via CompositeAbortController

import CompositeAbortController from 'composite-abort-controller'

const sourceControllers = [
  new AbortController(),
  new AbortController(),
  new AbortController(),
]
const sourceSignals = sourceControllers.map((c) => c.signal)

const controller = new CompositeAbortController(sourceSignals)
const signal = controller.signal()
console.log(signal.aborted) // false
signal.addEventListener('abort', handleAbort)

sourceControllers.forEach((controller) => controller.abort())
console.log(signal.aborted) // true
function handleAbort() {
  console.log('all signals aborted')
}

Example 2: Compose AbortSignals into one via CompositeAbortSignal

import { CompositeAbortSignal } from 'composite-abort-controller'

const sourceControllers = [
  new AbortController(),
  new AbortController(),
  new AbortController(),
]
const sourceSignals = sourceControllers.map((c) => c.signal)

const signal = new CompositeAbortSignal(sourceSignals)
console.log(signal.aborted) // false
signal.addEventListener('abort', handleAbort)

sourceControllers.forEach((controller) => controller.abort())
console.log(signal.aborted) // true
function handleAbort() {
  console.log('all signals aborted')
}

Example 3: Add AbortSignals to a existing CompositeAbortController

const compositeAbortController = new CompositeAbortController(sourceSignals)
const newController = new AbortController()

compositeAbortController.addSignal(newController.signal)

Example 4: Add AbortSignals to a existing CompositeAbortSignal

const compositeAbortController = new CompositeAbortController(sourceSignals)
const compositeAbortSignal = compositeAbortController.signal
const newController = new AbortController()

compositeAbortSignal.add(newController.signal)

License

MIT