Socket
Socket
Sign inDemoInstall

multitask

Package Overview
Dependencies
1
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    multitask

Asynchronous task-runner


Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Install size
440 kB
Created
Weekly downloads
 

Readme

Source

multitask

How it works

Create tasks

.set defines a task and its optional dependencies. Tasks and task dependencies are wrapped with Bluebird promises. Each task will be called with a last argument (explained below) containing a "done" function that completes the task and optionally returns a value.

multitask
  .set('first task', function(done){
    // do some asynchronous work and call done()
    done({ response: "tada!" });
  })
  .set('next task', ['list', 'of', 'dependent', 'tasks'], function(res, done){
    // notice this task depends on others ^
    // insert an argument to get an array of values returned by them ^ ...
    done({ task_count: res.length });
  })
  .set('task three', ['first task', 'next task'], function(done){
    // ... or omit that extra argument if the results of dependent tasks are not needed
    // the -last- argument will always be a `done` function
  });

Run tasks and handle responses

.run returns a Bluebird promise, which exposes a then method (for handling results) and a catch method (for catching errors).

multitask
  .run(['list', 'of', 'tasks'])
  .then(function(res){
    /* res == array containing results of all tasks */
  })
  .catch(function(err){
    /* err == any errors thrown by tasks */
  });

Reset before re-running

If you're running tasks with a cron or interval, .reset will clear out previous results before re-running. This can be useful when hitting an API for time-sensitive data.

multitask
  .reset()
  .run(['first', 'next']);

Example implementation

var tasks = require('./');

tasks.set('stage 1', function(done){
  setTimeout(function(){
    done(1);
  }, 1000);
});

tasks.set('stage 2', ['stage 1'], function(result, done){
  // receive prior result by providing argument ^
  setTimeout(function(){
    done(result * 2);
  }, 2000);
});

mtask.set('report', ['stage 2', 'stage 1'], function(result, done){
  done( result[0] + result[1] );
});

function init(){
  mtask
    .reset()
    .run(['report', undefined, 'also undefined', 'stage 1', 'stage 2'])
    .then(function(result){
      console.log('done', result);
    })
    .catch(function(err){
      console.log('err', err);
    });
}

init();
setInterval(init, 5000);

Output

  1. 'stage 1' task begins (1000ms pause)
  2. 'stage 2' task begins (2000ms pause)
  3. 'report' task begins
  4. runner exits with arguments { '0': [ 2, 1 ], '1': [Function] }
  5. runner logs 'done' with arguments { '0': [ 3, undefined, 'also undefined', 1, 2 ] }

FAQs

Last updated on 24 Apr 2015

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc