@edgenets/utils 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,9 +6,13 @@ export interface QueueOptions {
|
|
6
6
|
export declare class Queue<T> {
|
7
7
|
private options;
|
8
8
|
private queue;
|
9
|
+
private activeTasks;
|
9
10
|
private isProcessing;
|
10
11
|
constructor(options?: QueueOptions);
|
11
12
|
enqueue(task: QueueTask<T>): void;
|
13
|
+
getActiveTasks(): number;
|
14
|
+
getQueueLength(): number;
|
15
|
+
isQueueProcessing(): boolean;
|
12
16
|
private processQueue;
|
13
17
|
private delay;
|
14
18
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/utils/tasks/queue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,KAAK,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/utils/tasks/queue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,KAAK,CAAC,CAAC;IAMhB,OAAO,CAAC,OAAO;IALjB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAS;gBAGnB,OAAO,GAAE,YAAiD;IAI7D,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAQjC,cAAc,IAAI,MAAM;IAKxB,cAAc,IAAI,MAAM;IAKxB,iBAAiB,IAAI,OAAO;YAKrB,YAAY;IA+B1B,OAAO,CAAC,KAAK;CAGd"}
|
@@ -1,48 +1,59 @@
|
|
1
1
|
export class Queue {
|
2
2
|
options;
|
3
3
|
queue = [];
|
4
|
-
|
4
|
+
activeTasks = 0; // 当前正在执行的任务数量
|
5
|
+
isProcessing = false; // 是否正在处理队列
|
5
6
|
constructor(options = { concurrency: 1, interval: 1000 }) {
|
6
7
|
this.options = options;
|
7
8
|
}
|
9
|
+
// 添加任务到队列
|
8
10
|
enqueue(task) {
|
9
11
|
this.queue.push(task);
|
10
12
|
if (!this.isProcessing) {
|
11
13
|
this.processQueue();
|
12
14
|
}
|
13
15
|
}
|
16
|
+
// 获取当前活跃任务数
|
17
|
+
getActiveTasks() {
|
18
|
+
return this.activeTasks;
|
19
|
+
}
|
20
|
+
// 获取当前队列长度
|
21
|
+
getQueueLength() {
|
22
|
+
return this.queue.length;
|
23
|
+
}
|
24
|
+
// 是否正在处理任务
|
25
|
+
isQueueProcessing() {
|
26
|
+
return this.isProcessing;
|
27
|
+
}
|
28
|
+
// 队列处理逻辑
|
14
29
|
async processQueue() {
|
15
30
|
this.isProcessing = true;
|
16
31
|
while (this.queue.length > 0) {
|
32
|
+
// 取出当前批次任务
|
17
33
|
const batch = this.queue.splice(0, this.options.concurrency || 1);
|
34
|
+
this.activeTasks += batch.length;
|
35
|
+
// 执行批量任务
|
18
36
|
await Promise.all(batch.map(async (task) => {
|
19
37
|
try {
|
20
|
-
await task();
|
38
|
+
await task(); // 执行单个任务
|
39
|
+
}
|
40
|
+
catch (err) {
|
41
|
+
console.error(`[Queue][TaskFailed]: ${err}`);
|
21
42
|
}
|
22
|
-
|
23
|
-
|
43
|
+
finally {
|
44
|
+
this.activeTasks--; // 任务完成后减少计数
|
24
45
|
}
|
25
46
|
}));
|
47
|
+
// 如果还有剩余任务,延迟执行下一批
|
26
48
|
if (this.queue.length > 0) {
|
27
49
|
await this.delay(this.options.interval || 1000);
|
28
50
|
}
|
29
51
|
}
|
30
|
-
this.isProcessing = false;
|
52
|
+
this.isProcessing = false; // 队列处理完成
|
31
53
|
}
|
54
|
+
// 延迟函数
|
32
55
|
delay(ms) {
|
33
56
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
34
57
|
}
|
35
58
|
}
|
36
|
-
// import { TaskQueue, QueueTask } from './utils/tasks/queue';
|
37
|
-
// const taskQueue = new TaskQueue<void>({
|
38
|
-
// concurrency: 2, // 每次最多并发 2 个任务
|
39
|
-
// interval: 1000, // 每批任务间隔 1 秒
|
40
|
-
// });
|
41
|
-
// const exampleTask: QueueTask<void> = async () => {
|
42
|
-
// console.log("Processing task...");
|
43
|
-
// await new Promise((resolve) => setTimeout(resolve, 500)); // 模拟任务耗时
|
44
|
-
// };
|
45
|
-
// for (let i = 0; i < 10; i++) {
|
46
|
-
// taskQueue.enqueue(exampleTask);
|
47
|
-
// }
|
48
59
|
//# sourceMappingURL=queue.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/utils/tasks/queue.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,KAAK;
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/utils/tasks/queue.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,KAAK;IAMN;IALF,KAAK,GAAmB,EAAE,CAAC;IAC3B,WAAW,GAAG,CAAC,CAAC,CAAC,cAAc;IAC/B,YAAY,GAAG,KAAK,CAAC,CAAC,WAAW;IAEzC,YACU,UAAwB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAA1D,YAAO,GAAP,OAAO,CAAmD;IACjE,CAAC;IAEJ,UAAU;IACH,OAAO,CAAC,IAAkB;QAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,YAAY;IACL,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,WAAW;IACJ,cAAc;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,WAAW;IACJ,iBAAiB;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,SAAS;IACD,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,WAAW;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;YAEjC,SAAS;YACT,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,IAAI,CAAC;oBACH,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS;gBACzB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;gBAC/C,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY;gBAClC,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YAEF,mBAAmB;YACnB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,SAAS;IACtC,CAAC;IAED,OAAO;IACC,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF"}
|