1.0.0 • Published 10 months ago
@esfx/canceltoken v1.0.0
@esfx/canceltoken
The @esfx/canceltoken
package provides the CancelToken class, an implementation of @esfx/cancelable
.
Overview
Installation
npm i @esfx/canceltoken
Usage
Basic Usage
import { CancelToken } from "@esfx/canceltoken";
// consume a cancel token
async function doWork(token = CancelToken.none) {
// do some work
await doSomeOtherWork(token);
// throw an error if cancellation has been signaled since awaiting.
token.throwIfSignaled();
}
function doSomeOtherWork(token = CancelToken.none) {
return new Promise((resolve, reject) => {
token.throwIfSignaled(); // throw if cancellation has already been signaled.
// setup some external async operation...
const worker = ...;
// listen for cancellation and abort the worker.
const subscription = token.subscribe(() => {
worker.abort();
reject(new CancelError());
});
// start working, resolve when done
worker.start(resolve);
});
}
// call an async function that supports cancellation
const source = CancelToken.source();
doWork(source.token).then(() => {
// operation completed...
source.close();
}, err => {
if (err instanceof CancelError) {
// operation was canceled..
}
});
// cancel operation after 10 seconds
setTimeout(() => source.cancel(), 1000 * 10);
Linking Tokens
import { CancelToken } from "@esfx/canceltoken";
// You can compose a cancellation graph with a root CancelToken, allowing you to cancel a large
// number of asynchronous operations all at once
let rootSource = CancelToken.source();
function cancelAllDownloads() {
// explicitly cancel all downloads
rootSource.cancel();
// reset the root source
rootSource = CancelToken.source();
}
async function downloadFile(url, path, token = CancelToken.none) {
// add own source for timeout after 60 seconds
const timeoutSource = CancelToken.source();
setTimeout(() => timeoutSource.cancel(), 60 * 1000);
// download can be canceled by either 'rootSource', 'timeoutSource' or 'token':
const linkedToken = CancelToken.race([rootSource.token, timeoutSource.token, token]);
// ... use linkedToken to observe cancellation.
}
API
You can read more about the API here.
1.1.0-alpha.202307260322
10 months ago
1.1.0-alpha.202302091715
1 year ago
1.1.0-alpha.202306051228
11 months ago
1.1.0-alpha.202306061406
11 months ago
1.1.0-alpha.202306080253
11 months ago
1.1.0-alpha.202302071935
1 year ago
1.1.0-alpha.202306061316
11 months ago
1.1.0-alpha.202305082104
1 year ago
1.1.0-alpha.202211291446
1 year ago
1.1.0-alpha.202211221509
1 year ago
1.1.0-alpha.202210252139
2 years ago
1.0.0
2 years ago
1.0.0-dev.8
2 years ago
1.0.0-dev.7
2 years ago
1.0.0-dev.6
2 years ago
1.0.0-dev.5
2 years ago
1.0.0-pre.44
2 years ago
1.0.0-dev.4
2 years ago
1.0.0-pre.43
2 years ago
1.0.0-pre.42
2 years ago
1.0.0-pre.41
2 years ago
1.0.0-pre.40
2 years ago
1.0.0-pre.39
2 years ago
1.0.0-prenative.1
2 years ago
1.0.0-pre.38
2 years ago
1.0.0-dev.0
2 years ago
1.0.0-pre.37
2 years ago
1.0.0-pre.36
2 years ago
1.0.0-pre.35
2 years ago
1.0.0-pre.34
2 years ago
1.0.0-pre.33
2 years ago
1.0.0-pre.31
2 years ago
1.0.0-prenative.0
2 years ago