cancel
A JavaScript library that provides primitives for creating cancelable asynchronous operations.
Installation
Install using npm:npm install cancel
Example
import Cancellation, { CancellationError } from 'cancel';
// This is an example of a simple HTTP client that supports cancellation.
// The `sendRequest` method sends an HTTP request asynchronously.
// It takes a `Cancellation` object as one of its parameters.
function sendRequest(method, url, body, cancellation) {
// Check if cancellation has already been requested
if (cancellation.isCanceled()) {
// Reject with `CancellationError` so that the caller can distinguish between cancellation and failure
return Promise.reject(new CancellationError('Request has been canceled.'));
};
return new Promise(function executor(resolve, reject) {
const request = new XMLHttpRequest();
request.open(method, url, true);
request.onload = () => resolve({
status: request.status,
body: request.response,
});
request.onerror = () => reject(new Error('A network error has occurred.'));
// Add a listener that will be called when cancellation is requested
cancellation.onCancel(() => {
// Abort the HTTP request
request.abort();
// Reject with `CancellationError` so that the caller can distinguish between cancellation and failure
reject(new CancellationError('Request has been canceled.'));
});
request.send(body);
});
}
// Create a new `Cancellation` object
const cancellation = new Cancellation();
// Pass the `Cancellation` object to the `sendRequest` method
sendRequest('GET', 'https://api.github.com/users/nickuraltsev/starred', null, cancellation)
.then(response => console.log(`Response status: ${response.status}`))
.catch(error => {
if (error instanceof CancellationError) {
console.log('Request canceled');
} else {
console.log('Network failure');
}
});
// ...
// Cancel the request
cancellation.cancel();
API
Cancellation
new Cancellation()
Creates a newCancellation
object.Instance methods
cancel()
Issues a cancellation request.It is safe to call this method multiple times since all but the first call are ignored.
isCanceled()
Returnstrue
if cancellation has been requested; otherwise, returns false
.onCancel(listener)
Adds a listener to be notified when cancellation is requested.Parameters
listener
- A function to be called when cancellation is requested.
Returns a function that, when called, removes the listener.
throwIfCanceled()
Throws aCancellationError
if cancellation has been requested.fork()
Creates a childCancellation
object that will be canceled when the parent object is canceled.Static properties
CANCELED
Contains aCancellation
object that is already in the canceled state.CancellationError
The error that is thrown when an operation is canceled.new CancellationError(message)
Creates a new instance ofCancellationError
.Parameters
message
- The error message.