@cleah/progress-schedule

2.0.9 • Public • Published

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();

Readme

Keywords

none

Package Sidebar

Install

npm i @cleah/progress-schedule

Weekly Downloads

1

Version

2.0.9

License

ISC

Unpacked Size

25.6 kB

Total Files

10

Last publish

Collaborators

  • cleah