taskon
Version:
A simple JavaScript/TypeScript tasks queue that supports dynamic concurrency control
117 lines (116 loc) • 4.88 kB
TypeScript
import TaskQueueBase, { TaskQueueBaseProps } from './base';
import { Task, TaskId, TaskPriority, TaskStatus, TaskStatusUpdateHandler } from './type';
export type { TaskId, TaskStatus, QueueId, TaskPrioritizationMode, Task, } from './type';
export declare const MESSAGE_HUB_KEY = "task-queue";
export interface TaskQueueProps extends TaskQueueBaseProps {
}
/**
* Task queue with concurrency control. By default, all added tasks will be auto
* scheduled and executed. You can use stop() and start() to control the
* execution.
*/
export declare class TaskQueue extends TaskQueueBase {
private messageHub;
constructor(props?: TaskQueueProps);
/**
* Subscribe to the task status changes.
* @param onTaskStatusUpdate The listener for task status updates
*/
subscribeTaskStatusChange(onTaskStatusUpdate: TaskStatusUpdateHandler): () => void;
/**
* Unsubscribe from the task status changes.
* @param onTaskStatusUpdate The listener for task status updates
*/
unsubscribeTaskStatusChange(onTaskStatusUpdate: TaskStatusUpdateHandler): void;
/**
* Add a task with callback function to the queue.
* @param callback The callback function of the task
*/
addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>): Promise<ReturnType>;
/**
* Add a task with callback function to the queue.
* @param callback The callback function of the task
* @param onStatusUpdate The callback function to subscribe task status
* changes
*/
addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
/**
* Add a task with callback function to the queue.
* @param callback The callback function of the task
* @param taskId The ID of the task
* @param onStatusUpdate The callback function to subscribe task status
* changes
*/
addTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, taskId?: TaskId | undefined, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
/**
* Add a task with callback function to the prioritized queue.
* @param callback The callback function of the task
*/
addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>): Promise<ReturnType>;
/**
* Add a task with callback function to the prioritized queue.
* @param callback The callback function of the task
* @param onStatusUpdate The callback function to subscribe task status
* changes
*/
addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
/**
* Add a task with callback function to the prioritized queue.
* @param callback The callback function of the task
* @param taskId The ID of the task
* @param onStatusUpdate The callback function to subscribe task status
* changes
*/
addPrioritizedTask<ReturnType>(callback: () => ReturnType | Promise<ReturnType>, taskId?: TaskId | undefined, onStatusUpdate?: TaskStatusUpdateHandler<ReturnType>): Promise<ReturnType>;
/**
* Add tasks with callback functions to the queue.
* @param tasks The array of tasks with callback functions, IDs, task status
* update subscribers, and priorities
*/
addTasks(tasks: Array<{
callback: () => unknown;
taskId?: TaskId;
onStatusUpdate?: TaskStatusUpdateHandler<unknown>;
priority?: TaskPriority;
}>): Promise<unknown[]>;
/**
* Clear all waited tasks from the queue.
*/
clearWaitedTasks(): void;
/**
* Remove the task from waited task queue.
* @param taskIdOrTask The ID of the task or task object
*/
removeWaitedTask(taskIdOrTask: TaskId | Task): void;
/**
* Clear all failed retryable tasks from the queue.
*/
clearFailedRetryableTasks(): void;
/**
* Remove the task from failed retryable task queue.
* @param taskIdOrTask The ID of the task or task object
*/
removeFailedRetryableTask(taskIdOrTask: TaskId | Task): void;
/** @internal */
private _assertMemorizingTasksEnabled;
/**
* Get the task details with task ID.
* @param taskId The ID of the task
*/
getTaskDetails(taskId: TaskId): Task<any>;
/**
* Get all task details with optional matching status.
* @param status The matched status or array of statuses
*/
getAllTasksDetails(status?: TaskStatus | Array<TaskStatus>): Task<any>[];
/**
* Clear the task details with task ID.
* @param taskId The ID of the task
*/
clearTaskDetails(taskId: TaskId): void;
/**
* Clear all task details.
*/
clearAllTasksDetails(): void;
}
export default TaskQueue;