npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

task-runner

v0.0.8

Published

Simple task runner for JavaScript

Downloads

10

Readme

taskrunner.js

Simple task runner for JavaScript, either in Node.js or in the browser.

Node.js

Install using npm npm install task-runner then use with require:

var TaskRunner = require('task-runner').TaskRunner,
    Task = require('task-runner').Task;

Browsers

Clone the git repo git clone https://github.com/steveukx/taskrunner.js and include the lib/taskrunner.js file then use with the global variables TaskRunner and Task.

Usage

Tasks are essentially just functions that are scheduled to run one after each other. To ensure that long running tasks don't block the UI thread in the browser, or hold up the node.js server for longer than necessary, each task is run on the next available tick.

The functions wrapped as Task instances are called with a single argument which is a function that should be used to tell the TaskRunner that the Task is now complete. This function can be passed to any long running process (for example accessing the file system, making remote HTTP calls or querying a database).

The TaskRunner's start method can accept a function argument to use as a callback for when all tasks have finished running.

Examples

Simple usage - create a TaskRunner, set up a task that is asynchronous (making an external call using jQuery's ajax function) the do something else. Both tasks are functions that use the asynchronous model, and are started by using taskRunner.start().

var taskRunner = new TaskRunner();

// make a remote call
taskRunner.push(function(next) {
  jQuery.ajax( 'someUrl', {
     success: function(data) {
        // use the remote call data
        next();
     }
  }
});

// once that call is done with, do other things
taskRunner.push(function(next) {
  // do something
  next();
});

taskRunner.start();

The alternative simple usage pattern is to push Task instances into the TaskRunner:

function makeRequest(next) {
  jQuery.ajax( 'someUrl', {
     success: function(data) {
        // use the remote call data
        next();
     }
  }
}

function afterRequest(next) {
  // do something
  next();
}

var taskRunner = new TaskRunner();
taskRunner.push(new Task(makeRequest));
taskRunner.push(new Task(afterRequest));
taskRunner.start();

To run the same process but be informed when the tasks have been completed, pass a callback function to the start method:

document.body.className = 'loading';
var taskRunner = new TaskRunner();
taskRunner.push(new Task(makeRequest));
taskRunner.push(new Task(afterRequest));
taskRunner.start(function() {
  document.body.className = '';
});

Tasks that don't start any asynchronous processes can be created as synchronous tasks, these tasks are still called in the same way as regular asynchronous tasks, but they don't need to call the next method for themselves as this will be done automatically.

var synchronousTask = new Task(function() {}, 'name-s', false);
var asynchronousTask = new Task(function(next) { next(); }, 'name-a', true);

var taskRunner = new TaskRunner();
taskRunner.push(synchronousTask);
taskRunner.push(asynchronousTask);
taskRunner.start();

Notice that the synchronous task doesn't need to call anything to allow the TaskRunner to continue with other Tasks.

Tasks that use the next handler function can supply both error and results back to the TaskRunner, the results are then available as taskRunner.result() as an object using the name of the task as a key.

new TaskRunner()
  .async('stepOne', function (next) { next(null, "Returned value" })
  .start(function (taskRunner) {
     var result = taskRunner.result();
     // result.stepOne === "Returned value"
  });