occaecatidicta
Version:
51 lines (39 loc) • 1.18 kB
text/typescript
let sequeue = require('seq-queue');
export interface QueueTask {
}
export interface Queue {
push(fn: (task: QueueTask) => void, ontimeout: () => void, timeoutMs: number): void;
close(force: boolean): void;
}
let queues: { [key: number]: Queue } = {};
export let timeout = 3000;
/**
* Add tasks into task group. Create the task group if it dose not exist.
*
* @param {String} key task key
* @param {Function} fn task callback
* @param {Function} ontimeout task timeout callback
* @param {Number} timeout timeout for task
*/
export function addTask(key: number, fn: (task: QueueTask) => void, ontimeout: () => void, timeoutMs: number) {
let queue = queues[key];
if (!queue) {
queue = sequeue.createQueue(timeout);
queues[key] = queue;
}
return queue.push(fn, ontimeout, timeoutMs);
}
/**
* Destroy task group
*
* @param {String} key task key
* @param {Boolean} force whether close task group directly
*/
export function closeQueue(key: number, force: boolean) {
if (!queues[key]) {
// ignore illeagle key
return;
}
queues[key].close(force);
queues[key] = undefined;
}