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()
方法获得。
TaskPool
类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获得对应的任务。
Task
类constructor(func: Function, ...args: any[])
exec(): any
执行任务并返回执行结果。
setArgs(...args: any[]): void
重新设置任务参数。
本项目使用MIT
协议发布,可查看LICENSE
文件获取更多信息。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。