4.3.0 • Published 4 months ago

@jsenv/abort v4.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Abort npm package

Help to write code accepting an abortSignal.

  • Designed to cleanup by default (removing event listeners, clearing timeouts, ...)
  • Allow to safely bypass max listeners warning when needed
    • Code can do 20 abortable fetch requests in parallel without warnings
  • Manage multiple abort signals
    • Compose abort signals from multiple sources
    • Code can do differents things depending on which signal aborted the operation

Example

fetch_demo.mjs

import { customFetch } from "./fetch_custom.mjs";

const abortController = new AbortController();
const signal = abortController.signal;
process.on("warning", () => {
  abortController.abort();
});
await customFetch("http://example.com", { signal });

Code above pass an abort signal to customFetch.

Let's see how "@jsenv/abort" helps to manage the signal received.

fetch_custom.mjs

import { Abort } from "@jsenv/abort"

export const customFetch = (
  url,
  { signal = new AbortController().signal } = {},
) => {
  // create an operation
  const fetchOperation = Abort.startOperation()

  // abort according to signal received in param
  fetchOperation.addAbortSignal(signal)

  // also abort on SIGINT
  const SIGINTAbortSource = fetchOperation.addAbortSource((abort) => {
    process.on("SIGINT", abort)
    return () => {
      process.removeListener("SIGINT", abort)
    }
  })

  // also abort after 5s
  const timeoutAbortSource = fetchOperation.timeout(5000)

  try {
    const response = await fetch(url, { signal: fetchOperation.signal })
    return response
  } catch (e) {
    if (Abort.isAbortError(e)) {
      if (SIGINTAbortSource.signal.aborted) {
        // aborted by SIGINT
      }
      if (timeoutAbortSource.signal.aborted) {
        // aborted by timeout
      }
      if (signal.aborted) {
        // aborted from outside
      }
    }
    throw e
  } finally {
    await fetchOperation.end()
  }
}
4.3.0

4 months ago

4.2.3

2 years ago

4.2.2

2 years ago

4.2.4

2 years ago

4.1.0

3 years ago

4.1.2

2 years ago

4.1.1

3 years ago

4.0.0

3 years ago

3.1.2

3 years ago

3.1.1

3 years ago

3.1.0

3 years ago

3.0.0

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.0.0

3 years ago

0.0.1

3 years ago