Execute asynchronous functions in order and limit the number of simultaneous executions。 按顺序执行异步函数,并限制同时执行的数量。
生成一个scheduler
limit
: number; default:4 Scheduler最大同时执行的数量;Returns
: scheduler
let scheduler = new Scheduler(2);
添加scheduler要执行的函数
handler
: function|async function 要执行的异步或同步函数args
: 要执行函数的参数callback
: 回调函数Returns
:要执行的函数返回的结果
async function timeoutAdd(time, ...args) {
return new Promise(resolve => {
setTimeout(() => {
let result = (args && args.length) && args.reduce((pre, cur) => {
return pre + cur;
});
console.log(`time:${time}, args:${args}, result:${result}`)
resolve(result)
}, time)
});
}
function callback(err, res) {
console.log(`callback:${res}`);
}
scheduler.add(timeoutAdd, [500, 3, 2]);
scheduler.add(() => timeoutAdd(1500, 2, 2));
scheduler.add(() => timeoutAdd(1500, 2, 2), null, callback);
scheduler.add(() => timeoutAdd(1500, 2, 2), null, (err, res) => {
console.log(`callback:${res}`)
});
添加scheduler要执行的函数
handlers
: array function 要执行的异步或同步函数数组callback
: 回调函数Returns
:要执行的函数返回的结果
scheduler.adds([() => timeoutAdd(1000, 1, 3), () => timeoutAdd(500, 1, 2, 3, 4), () => timeoutAdd(400, 1, 4), () => timeoutAdd(600)];
scheduler.adds([{
handler: timeoutAdd,
args: [3000, 1, 3],
}]);
scheduler.adds([{
handler: () => timeoutAdd(3000, 1, 3),
}, {
handler: () => timeoutAdd(1000),
},
{
handler: timeoutAdd,
args: [2000]
}, {
handler: timeoutAdd,
args: [100, 1, 5],
callback: callback,
}, {
handler: (val) => Promise.resolve(val),
args: ['哈哈哈'],
callback: (err, res) => {
console.log(`callback:${res}`)
},
}
]);
console.log('获取函数结果', await scheduler.add(timeoutAdd, [1, 9, 7]));
console.log('获取函数结果',await scheduler.adds([{
handler: () => timeoutAdd(0, 1, 3),
}, {
handler: () => timeoutAdd(0,3,4),
}]))