update task pool

This commit is contained in:
Gabe Yuan
2023-10-19 14:28:18 +08:00
parent 53181588cf
commit f3029a0f76

View File

@@ -6,7 +6,13 @@
* @param {*} _limit
* @returns
*/
export const taskPool = (fn, preFn, _interval = 100, _limit = 100) => {
export const taskPool = (
fn,
preFn,
_interval = 100,
_limit = 100,
_retryInteral = 1000
) => {
const pool = [];
const maxRetry = 2; // 最大重试次数
let maxCount = _limit; // 最大数量
@@ -14,23 +20,6 @@ export const taskPool = (fn, preFn, _interval = 100, _limit = 100) => {
let interval = _interval; // 间隔时间
let timer = null;
const handleTask = async (item, preArgs) => {
curCount++;
const { args, resolve, reject, retry } = item;
try {
const res = await fn({ ...args, ...preArgs });
resolve(res);
} catch (err) {
if (retry < maxRetry) {
pool.push({ args, resolve, reject, retry: retry + 1 });
} else {
reject(err);
}
} finally {
curCount--;
}
};
const run = async () => {
// console.log("timer", timer);
timer && clearTimeout(timer);
@@ -39,12 +28,24 @@ export const taskPool = (fn, preFn, _interval = 100, _limit = 100) => {
if (curCount < maxCount) {
const item = pool.shift();
if (item) {
curCount++;
const { args, resolve, reject, retry } = item;
try {
const preArgs = await preFn(item.args);
handleTask(item, preArgs);
const res = await fn({ ...args, ...preArgs });
resolve(res);
} catch (err) {
console.log("[preFn]", err);
pool.push(item);
console.log("[task]", retry, err);
if (retry < maxRetry) {
const retryTimer = setTimeout(() => {
clearTimeout(retryTimer);
pool.push({ args, resolve, reject, retry: retry + 1 });
}, _retryInteral);
} else {
reject(err);
}
} finally {
curCount--;
}
}
}