English | 简体中文
@antmind/task-pool是一个简单的Node.js函数任务池实现,实现了对同步、异步方法的并发控制支持。
-
通过NPM:
npm install --save @antmind/task-pool
-
通过Yarn:
yarn add @antmind/task-pool
-
导入
@antmind/task-pool包中的TaskPool以及Task。 -
建立任务池,并根据需求设置并发限制数量(未设置默认为
30)。 -
创建任务实例并添加到任务池
-
调用
exec()方法执行任务池中的任务。
import { Task, TaskPool } from '@antmind/task-pool';
const pool = new TaskPool();
for (let i = 5; i > 0; i -= 1) {
const task = new Task((val: any) => val, i);
pool.addTask(task);
}
pool.exec().then((data: any) => console.log(data));
// [ 5, 4, 3, 2, 1 ]You can limit the task concurrency number by concurrency option, and this value must equal or great than 0.
在实例化任务池TaskPool时可通过options参数中的concurrency控制并发数,该值必须设置为大于等于0的整数。
import { Task, TaskPool } from '@antmind/task-pool';
const pool = new TaskPool({ concurrency: 3 });
for (let i = 5; i > 0; i -= 1) {
pool.addTask(
new Task(
(val: any) => new Promise((resolve: Function) => {
setTimeout(
() => {
console.log(`num: ${val}`);
resolve(val);
},
val * 100,
);
}),
i,
),
);
}
pool.exec().then((data) => console.log(data));
// num: 3
// num: 4
// num: 5
// num: 1
// num: 2
// [ 5, 4, 3, 2, 1 ]若将concurrency的值设置为0,则代表无并发数量限制,执行效果等同于Promise.all()。
import { Task, TaskPool } from '@antmind/task-pool';
const pool = new TaskPool({ concurrency: 0 });
for (let i = 5; i > 0; i -= 1) {
pool.addTask(
new Task(
(val: any) => new Promise((resolve: Function) => {
setTimeout(
() => {
console.log(`num: ${val}`);
resolve(val);
},
val * 100,
);
}),
i,
),
);
}
pool.exec().then((data) => console.log(data));
// num: 1
// num: 2
// num: 3
// num: 4
// num: 5
// [ 5, 4, 3, 2, 1 ]-
concurrency: 最大并发任务数,需要为大于等于0的整数值,默认值为30。若设置为0则等同于执行Promise.all()。 -
throwsError: 当任务执行失败(发生错误)时,是否抛出错误,默认为true。若设置为false,程序将继续执行直到所有任务都执行完成,并保存所有错误信息(可通过getErrors()方法获得。
-
constructor() -
constructor(options: TaskPoolOptions) -
constructor(task: Task | Task[], options?: TaskPoolOptions)
-
exec(): Promise<any[]>执行任务池中的任务。
-
addTask(task: Task): number将一个任务实例添加到任务池中,并返回任务对应的id。
-
addTasks(task: Task | Task[]): number[]将一个或多个任务实例添加到任务池中,并返回任务对应的id。
-
setConcurrency(concurrency: number): void设置最大并发数。
-
getErrors(): Promise<Error | undefined>获得上次执行产生的错误,错误在数组中的索引对应于任务添加的顺序。
-
getTask(id: number): Task | null根据id获得对应的任务。
constructor(func: Function, ...args: any[])
-
exec(): any执行任务并返回执行结果。
-
setArgs(...args: any[]): void重新设置任务参数。
本项目使用MIT协议发布,可查看LICENSE文件获取更多信息。