cy-plugin-queue
v0.0.3
Published
自定义队列
Readme
队列
cy-plugin-queue
安装
npm install cy-plugin-queue -D
使用
import Queue from './cy-plugin-queue';
import type { IQueueOptions, ITaskOptions } from './cy-plugin-queue';
// 创建队列实例
const queue = new Queue({
debug: true, // 开启日志插件
retryCount: 2, // 重试次数
timeout: 3000, // 超时限制
onSuccess: (result, extra) => {
console.log('全局成功回调:', result, extra);
},
onError: (err, extra) => {
console.error('全局失败回调', err, extra);
}
});
// 添加任务
queue.push({
taskParams: { title: '任务一' },
extraData: { a: 1 },
timeout: 3000, // 超时限制
retryCount: 2,
task: async (param, ttt) => {
return new Promise<string>((resolve, reject) => {
const timer = setTimeout(() => {
resolve(`${JSON.stringify(param)}`);
}, 5000);
ttt?.signal?.addEventListener('abort', () => {
clearTimeout(timer);
reject(new Error('aborted'));
});
});
},
onSuccess: (res, extra) => {
console.log('任务一成功回调==================================', res, extra);
}
});
queue.push({
taskParams: { title: '任务二' },
extraData: { a: 2 },
task: async (param) => {
await new Promise((r) => setTimeout(r, 1000));
return `${param}`;
},
onSuccess: (res, extra) => {
console.log('任务二成功回调==================================', res, extra);
}
});
// 添加一个故意失败的任务,测试重试机制
queue.push({
taskParams: { title: '任务三' },
task: async (_param) => {
// throw new Error('模拟测试失败');
function demo() {
return new Promise<string>((_resolve, reject) => {
setTimeout(() => {
reject(`失败啦`);
}, 3000);
});
}
return await demo();
},
retryCount: 2,
onError: (res) => {
console.log('任务三 失败 回调==================================', res);
}
});
// 直接返回
queue.push({
taskParams: { title: '任务四' },
task: (_param) => {
return '任务四成功';
},
onSuccess: (res) => {
console.log('任务四 成功====================', res);
}
});
// 清空队列
queue.clear();
// 终止当前任务
queue.abort();