This package helps you split blocking - time consuming operations to chunks that are executed in an asynchronous manner. The package was inspired long time ago, by a StackOverflow Question and main usage should be for systems where multi-threading operations are not available.
Please visit demo page to see examples.
Package is available on npm repository: npm i chunked-call -D
// Callback to execution code
declare type IChunkedCallTask = () => boolean;
// Callback on finishing execution
declare type IChunkedCallCallback = () => void;
// Starts Chunked Call
// @task: callback to function that executes until it returns false.
// @callback: called when execution is finished.
// @limitMs: once execution time exceeded given time, it waits to a next frame
// return: Handler to Chunked Call executor, can be used to terminate execution
function setChunkedCall(task: IChunkedCallTask, callback?: IChunkedCallCallback, limitMs?: number): number;
// Promisified version of setChunkedCall
function setChunkedCallPromise(task: IChunkedCallTask, limitMs?: number): Promise<void>;
// Terminates execution of ongoing chunked call
// @id: Identifier of chunked call gotten from setChunkedCall
// return: True if an execution has been killed successfully, false otherwise.
function killChunkedCall(id: number): boolean;
let setChunkedCall = require("chunked-call").setChunkedCall;
let killChunkedCall = require("chunked-call").killChunkedCall;
// original code:
for (let i = 0; i < array.length; i++) {
doSomeOperation(array[i]);
}
nextStep();
// becomes:
setChunkedCall(
(() => {
let i = 0;
return () => {
i++;
doSomeOperation(array[i]);
return i < array.length;
}
})(),
() => nextStep()
);
// original code:
while (array.length) {
doSomeOperation(array.pop());
}
nextStep();
// becomes:
setChunkedCall(
() => {
if (array.length) {
doSomeOperation(array.pop());
}
return array.length;
},
() => nextStep()
);
// original code:
do {
doSomeOperation(array.pop());
}
while (array.length);
nextStep();
// becomes:
setChunkedCall(
() => {
doSomeOperation(array.pop());
return array.length > 0;
},
() => nextStep()
);
1.0.0
- Version usessetTimeout
andclaerTimeout
to schedule next execution0.0.6
- Added Travis CI0.0.5
- Updated documentation0.0.4
- Improve test coverage0.0.3
- Updated documentation0.0.2
- First release