DNDQoteGrabber/node_modules/@sapphire/async-queue/dist/esm/index.d.mts
2023-12-20 15:09:06 +01:00

56 lines
1.7 KiB
TypeScript

/**
* The AsyncQueue class used to sequentialize burst requests
*/
declare class AsyncQueue {
/**
* The amount of entries in the queue, including the head.
* @seealso {@link queued} for the queued count.
*/
get remaining(): number;
/**
* The amount of queued entries.
* @seealso {@link remaining} for the count with the head.
*/
get queued(): number;
/**
* The promises array
*/
private promises;
/**
* Waits for last promise and queues a new one
* @example
* ```typescript
* const queue = new AsyncQueue();
* async function request(url, options) {
* await queue.wait({ signal: options.signal });
* try {
* const result = await fetch(url, options);
* // Do some operations with 'result'
* } finally {
* // Remove first entry from the queue and resolve for the next entry
* queue.shift();
* }
* }
*
* request(someUrl1, someOptions1); // Will call fetch() immediately
* request(someUrl2, someOptions2); // Will call fetch() after the first finished
* request(someUrl3, someOptions3); // Will call fetch() after the second finished
* ```
*/
wait(options?: Readonly<AsyncQueueWaitOptions>): Promise<void>;
/**
* Unlocks the head lock and transfers the next lock (if any) to the head.
*/
shift(): void;
/**
* Aborts all the pending promises.
* @note To avoid race conditions, this does **not** unlock the head lock.
*/
abortAll(): void;
}
interface AsyncQueueWaitOptions {
signal?: AbortSignal | undefined | null;
}
export { AsyncQueue, type AsyncQueueWaitOptions };