业务中经常会有一些批量操作的任务,比如使用 JavaScript 预加载一组图片,批量上传一些资源。如果这些任务一次性启动,势必会消耗很多资源和带宽。理想的做法应该对这些任务进行限制,比如一次只跑几个,当其中一些任务完成后,再添加新的任务到队列。
</span>running ${<span class="pl-smi">task</span>.<span class="pl-c1">name</span>}<span class="pl-pds">
</span>task ${<span class="pl-smi">task</span>.<span class="pl-c1">name</span>} finished<span class="pl-pds">
</span>${<span class="pl-smi">task</span>.<span class="pl-c1">name</span>} failed<span class="pl-pds">
</span>[TaskRunner] ${<span class="pl-smi">msg</span>}<span class="pl-pds">
import { TaskRunner } from "./taskRunner";
const runner = new TaskRunner(3, true);
function taskGenerator(taskName: string, time: number) {
return {
name: taskName,
fn: () =>
new Promise<string>((resolve, _reject) => {
setTimeout(() => {
resolve(</span>result for task ${<span class="pl-smi">taskName</span>}<span class="pl-pds">
);
}, time);
})
};
}
const errorTask = {
name: "errroTask",
fn: () =>
new Promise<string>((_resolve, reject) => {
setTimeout(() => {
reject("errorTask failed");
}, 3000);
})
};
[errorTask]
.concat(
[...new Array(5).keys()].map((_value, index) =>
taskGenerator(String(index), Math.random() * 10000 + 1000)
)
)
.forEach(task => runner.addTask(task));
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步