AbortSignal

An async operation should be abortable, in golang, this is achived by using context.Context. In JavaScript, this can be achived by AbortSignal.

Abort on timeout

fetch(url, {signal: AbortSignal.timeout(1000)})

Support abort signal in you function:

function myOp({signal}) {
  return new Promise((resolve, reject) => {
    if (signal.aborted) {
      reject(signal.reason)
    }
    signal.addEventListener('abort', () => reject(signal.reason))
  })
}
myOp({signal: AbortSignal.timeout(1000)})

Explicit Abortion

AbortController allows you to abort explicitly

const controller = new AbortController()

fetch('https://githbub.com', {signal: controller.signal}).catch(console.log)

controller.abort()

Combining multiple sigals

like Promise.race()

fetch(url, {signal: AbortSignal.any([signal, signal2])})

Creating a aborted signal

like Promise.reject()

AbortSignal.abort(reason)