@cleah/progress-schedule
v2.0.9
Published
Schedule progress
Downloads
6
Readme
Progress Scheduler
Basic Usage
import Schedule from '@cleah/progress-schedule'
let schedule = new Schedule();
schedule.schedule((progress)=>{
console.log(`Progress ${progress.name} is running.`)
}, "Basic Progress");
// wait until progress completed
await schedule.wait();
Schedule async progress
let progress = schedule.schedule(async function(progress){
await console.log(`Progress ${progress.name} is running.`);
}, "Basic Async Progress");
console.log(progress.toJson())
Schedule more progresses
for (let i = 0; i < 10; i++){
schedule.schedule((progress)=>{
console.log(`Progress ${progress.name} is running.`)
}, {
name: `Progress ${i+1}`,
onError: (error, progress) => {
console.log(`Error on progress ${progress.name}`);
console.error(error);
},
onComplete: (progress) => {
console.log(`Completed progress ${progress.name}`);
}
});
}
Execute tasks in progress
let schedule = new Schedule();
let progress = schedule.schedule(async function(progress){
let tasks = [];
for (let i = 0; i < 10; i++){
tasks.push({});
}
await progress.each(tasks, async function(task, i, progress) {
// do task here
});
}, {
name: `Progress tasks`,
onTaskComplete: (progress, task, index, error)=>{
console.log(`Task ${index} done`);
}
})
await schedule.wait();
console.log(progress.toJson())
Execute tasks in progress in parallel
async function runTasksParallel(){
let schedule = new Schedule();
let progress = schedule.schedule(async function(progress){
let tasks = [];
for (let i = 0; i < 10; i++){
tasks.push({});
}
await progress.each(tasks, async function(task, i, progress) {
await delay(Math.random() * 1000);
}, 3);
}, {
name: `Progress tasks in parallel`,
onTaskComplete: (progress, task, index, error)=>{
console.log(`Task ${index} done`);
}
})
await schedule.wait();
console.log(progress.toJson())
}
async function delay(time){
return new Promise((resolve)=>{
setTimeout(()=>{
resolve();
}, time);
});
}
Execute sub tasks
let progress = schedule.schedule(async function(progress){
let tasks = [];
for (let i = 0; i < 10; i++){
tasks.push({});
}
await progress.sub(async function(){
console.log("Test sub progress 1")
}, "Sub Progress 1");
await progress.sub(async function(){
console.log("Test sub progress 2")
}, "Sub Progress 2");
}, {
name: `Progress sub tasks`,
})
await schedule.wait();
console.log(progress.toJson())
Cancel progress
let progress = schedule.schedule((progress)=>{
console.log(`Progress ${progress.name} is running.`)
}, "Cancel Progress");
progress.cancel();
Cancel progress tasks
let progress = schedule.schedule(async function(progress){
let tasks = [];
for (let i = 0; i < 10; i++){
tasks.push({});
}
await progress.each(tasks, async function(task, i, progress) {
await delay(Math.random() * 1000);
}, 3);
}, {
name: `Progress tasks in parallel`,
onTaskComplete: (progress, task, index, error)=>{
console.log(`Task ${index} done`);
}
})
await delay(500);
progress.cancel();