awaitqueue
Advanced tools
Comparing version
@@ -14,2 +14,8 @@ export declare type AwaitQueueOptions = { | ||
export declare type AwaitQueueTask<T> = () => (Promise<T> | T); | ||
export declare type AwaitQueueDumpItem = { | ||
task: AwaitQueueTask<unknown>; | ||
name?: string; | ||
enqueuedTime: number; | ||
executingTime: number; | ||
}; | ||
export declare class AwaitQueue { | ||
@@ -44,7 +50,3 @@ private closed; | ||
stop(): void; | ||
dump(): { | ||
task: AwaitQueueTask<unknown>; | ||
name?: string; | ||
stopped: boolean; | ||
}[]; | ||
dump(): AwaitQueueDumpItem[]; | ||
private next; | ||
@@ -51,0 +53,0 @@ private executeTask; |
@@ -74,3 +74,5 @@ "use strict"; | ||
reject, | ||
stopped: false | ||
stopped: false, | ||
enqueuedAt: new Date(), | ||
executedAt: undefined | ||
}; | ||
@@ -101,2 +103,3 @@ // Append task to the queue. | ||
dump() { | ||
const now = new Date(); | ||
return this.pendingTasks.map((pendingTask) => { | ||
@@ -106,3 +109,8 @@ return { | ||
name: pendingTask.name, | ||
stopped: pendingTask.stopped | ||
enqueuedTime: pendingTask.executedAt | ||
? pendingTask.executedAt.getTime() - pendingTask.enqueuedAt.getTime() | ||
: now.getTime() - pendingTask.enqueuedAt.getTime(), | ||
executingTime: pendingTask.executedAt | ||
? now.getTime() - pendingTask.executedAt.getTime() | ||
: 0 | ||
}; | ||
@@ -130,2 +138,3 @@ }); | ||
return; | ||
pendingTask.executedAt = new Date(); | ||
try { | ||
@@ -132,0 +141,0 @@ const result = yield pendingTask.task(); |
{ | ||
"name": "awaitqueue", | ||
"version": "2.3.2", | ||
"version": "2.3.3", | ||
"description": "JavaScript utility to enqueue async tasks for Node.js and the browser", | ||
@@ -5,0 +5,0 @@ "author": "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)", |
@@ -17,3 +17,3 @@ # AwaitQueue | ||
```js | ||
const { AwaitQueue } = require('awaitqueue'); | ||
const { AwaitQueue, AwaitQueueTask, AwaitQueueDumpItem } = require('awaitqueue'); | ||
``` | ||
@@ -24,3 +24,3 @@ | ||
```js | ||
import { AwaitQueue } from 'awaitqueue'; | ||
import { AwaitQueue, AwaitQueueTask, AwaitQueueDumpItem } from 'awaitqueue'; | ||
``` | ||
@@ -31,4 +31,31 @@ | ||
### new AwaitQueue({ ClosedErrorClass = Error, StoppedErrorClass = Error }) | ||
### type AwaitQueueDumpItem | ||
```typescript | ||
type AwaitQueueDumpItem = | ||
{ | ||
task: AwaitQueueTask<unknown>; | ||
name?: string; | ||
enqueuedTime: number; | ||
executingTime: number; | ||
}; | ||
``` | ||
TypeScript type representing an item in the array returned by the `awaitQueue.dump()` method. | ||
* `task`: The function to be executed. | ||
* `name`: The name of the given `function` (if any) or the `name` argument given to `awaitQueue.push()` method (if any). | ||
* `enqueuedTime`: Time in milliseconds since the task was enqueued, this is, since `awaitQueue.push()` was called until its execution started or until now if not yet started. | ||
* `executingTime`: Time in milliseconds since the task execution started (or 0 if not yet started). | ||
### type AwaitQueueTask | ||
```typescript | ||
type AwaitQueueTask<T> = () => (Promise<T> | T) | ||
``` | ||
TypeScript type representing a function that returns a value `T` or a Promise that resolves with `T`. | ||
### new AwaitQueue({ ClosedErrorClass? = Error, StoppedErrorClass? = Error }) | ||
Creates an `AwaitQueue` instance. | ||
@@ -39,25 +66,26 @@ | ||
### async awaitQueue.push(task: AwaitQueueTask<T>, name?: string): Promise<T> | ||
### async awaitQueue.push(task) | ||
Accepts a task as argument and enqueues it after pending tasks. Once processed, the `push()` method resolves (or rejects) with the result returned by the given task. | ||
* `@param {Function} task`: Function that must return a `Promise` or a directly a value. | ||
* `@param task`: Function that must return a `Promise` or a directly a value. | ||
* `@param name`: Optional task name (useful for `awaitQueue.dump()` method). | ||
### awaitQueue.size: number | ||
### awaitQueue.size | ||
The number of ongoing enqueued tasks. | ||
### awaitQueue.close(): void | ||
### awaitQueue.close() | ||
Closes the queue. Pending tasks will be rejected with the given `ClosedErrorClass` error. The `AwaitQueue` instance is no longer usable (this method is terminal). | ||
### awaitQueue.stop(): void | ||
### awaitQueue.stop() | ||
Make ongoing pending tasks reject with the given `StoppedErrorClass` error. The `AwaitQueue` instance is still usable for future tasks added via `push()` method. | ||
### awaitQueue.dump(): AwaitQueueDumpItem[] | ||
Returns an array with information about pending tasks in the queue. See the `AwaitQueueDumpItem` type above. | ||
## Usage example | ||
@@ -64,0 +92,0 @@ |
@@ -17,2 +17,10 @@ export type AwaitQueueOptions = | ||
export type AwaitQueueDumpItem = | ||
{ | ||
task: AwaitQueueTask<unknown>; | ||
name?: string; | ||
enqueuedTime: number; | ||
executingTime: number; | ||
}; | ||
type PendingTask = | ||
@@ -24,2 +32,4 @@ { | ||
reject: (error: Error) => void; | ||
enqueuedAt: Date; | ||
executedAt?: Date; | ||
stopped: boolean; | ||
@@ -119,3 +129,5 @@ } | ||
reject, | ||
stopped : false | ||
stopped : false, | ||
enqueuedAt : new Date(), | ||
executedAt : undefined | ||
}; | ||
@@ -152,10 +164,17 @@ | ||
dump(): { task: AwaitQueueTask<unknown>; name?: string; stopped: boolean }[] | ||
dump(): AwaitQueueDumpItem[] | ||
{ | ||
const now = new Date(); | ||
return this.pendingTasks.map((pendingTask) => | ||
{ | ||
return { | ||
task : pendingTask.task, | ||
name : pendingTask.name, | ||
stopped : pendingTask.stopped | ||
task : pendingTask.task, | ||
name : pendingTask.name, | ||
enqueuedTime : pendingTask.executedAt | ||
? pendingTask.executedAt.getTime() - pendingTask.enqueuedAt.getTime() | ||
: now.getTime() - pendingTask.enqueuedAt.getTime(), | ||
executingTime : pendingTask.executedAt | ||
? now.getTime() - pendingTask.executedAt.getTime() | ||
: 0 | ||
}; | ||
@@ -189,2 +208,4 @@ }); | ||
pendingTask.executedAt = new Date(); | ||
try | ||
@@ -191,0 +212,0 @@ { |
Sorry, the diff of this file is not supported yet
26186
10.08%620
4.91%191
17.18%