A non-supported implemetation of Cancellation in Typescript.
Example taken from rbuckton/CancellationToken.md:
public fetchAsync(url, cancellationToken = CancellationToken.default) {
return new Promise((resolve, reject) => {
// throw (reject) if cancellation has already been requested.
cancellationToken.throwIfCanceled();
// alternatively:
//
// // if cancellation has been requested, reject the Promise with the reason for cancellation.
// if (cancellationToken.canceled) {
// reject(cancellationToken.reason);
// return;
// }
//
// or even:
//
// // register the reject handler of the Promise to receive the cancellation signal. If the source is already
// // canceled, this will call the reject handler immediately.
// cancellationToken.register(reject);
// if (cancellationToken.canceled) {
// return;
// }
var xhr = new XMLHttpRequest();
// save a callback to abort the xhr when cancellation is requested
var oncancel = (reason: any) => {
// abort the request
xhr.abort();
// reject the promise
reject(reason);
}
// wait for the remote resource
xhr.onload = event => {
// async operation completed, stop waiting for cancellation
registration.unregister();
// resolve the promise
resolve(event);
}
xhr.onerror = event => {
// async operation failed, stop waiting for cancellation
cancellationToken.unregister();
// reject the promise
reject(event);
}
// register the callback to execut when cancellation is requested
var registration = cancellationToken.register(oncancel);
// begin the async operation
xhr.open('GET', url, /*async*/ true);
xhr.send(null);
});
}
npm install @lpezet/ts-cancellation
https://gist.github.com/bakerface/492c631c6aa23e915bde9243252b52f4
https://gist.github.com/rbuckton/256c4e929f4a097e2c16
https://github.com/rbuckton/asyncjs/blob/master/lib/cancellation.ts
To publish next version of @lpezet/ts-cancellation
, run the following:
npm version patch
git push --tags origin main
npm run build-prod
npm publish --access public