Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including evented-async-loop with all npm packages installed. Try it out:

var eventedAsyncLoop = require("evented-async-loop")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

evented-async-loop v0.1.1

Loop through asynchronous code with events

##evented-async-loop Build Status

Loop through asynchronous code with events

Installation

npm install evented-async-loop

Usage

Check examples and test folders for more details.

Basic

'use strict';

var asyncLoop = require('../index');
var dummyArray = require('./dummyArray');


//Make an array of asynchronous functions
var arr = dummyArray(10);

var loop = asyncLoop.create(arr);

loop.on('next', function (elm, i, array) {
    elm(function() {
        console.log(i);
        loop.next();
    });
});

loop.on('done', function () {
    console.log('Done!');
});

loop.start();

Chaining

//All methods accept .next are chainable
loop.on('next', function (elm, i, array) {
    elm(function () {
        console.log(i);
        loop.next();
    });
}).on('done', function () {
    console.log('Done!');
}).start();

Exit early

loop.on('next', function (elm, i, array) {
    elm(function () {
        if (i === 5) {
            // Stop the loop early, you can pass any number of arguments to .done
            loop.done(i, 'i am Batman');
        }
        loop.next();
    });
}).on('done', function (i, msg) {
    console.log('Loop stopped at %s and %s', i, msg);
}).start();

Data propagation

// loop.start(...).on() is ok too!
loop.on('next', function (elm, i, array, arg1, arg2) { // extra arguments are appended
    elm(function () {
        // pass data to the next iteration
        loop.next(++arg1, arg2);
        // after the final iteration tha arguments are passed to 'done'
    });
}).on('done', function (arg1, arg2) {
    console.log('arg1: %s, arg2: %s', arg1, arg2);
}).start(0, 'blah'); // Pass any number of arguments

Error handling

loop.on('next', function (elm, i, array) {
    elm(function () {
        if (i === 3) {
            // Emitting an error event will not break the loop
            loop.error('Oh noez!');
        }

        if (i === 8) {
            // But if you need to break the loop and emit an error
            loop.break().error('This will stop the loop');
            // or, loop.error('This will stop the loop').break();
            // if you want to emit the error first
        }

        loop.next();
    });
}).on('done', function () {
    // This wont run
    console.log('Done!');
}).on('error', function (err) {
    console.log(err);
}).start();

##API ###Events

  • next[element, i, array, arg1, ...]
  • done[arg1, ...]
  • error[arg1, ...]

###Methods

  • .start([arg1, ...]): Start the loop.Passes arguments to the first next event
  • .next([arg1, ...]): Go to the next iteration. Passes agruments to next event. If the loop is completed done is emitted instead.
  • .done([arg1, ...]): Stop the loop early. Passes arguments to done event
  • .error([err]): Emit an error event
  • .break(): Break the loop. it wont emit done

##Test Change your working directory to the project's root, npm install to get the development dependencies and then npm test

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free