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)