1.0.0 • Published 4 years ago

async-inprogress v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

Async While

This is a small utility for generating while loops with ES6 Promises.

Install

Download a UMD bundle from the releases page. The variable asyncWhile will be attached to window.

<script type="text/javascript" src="async-while.js"></script>

If using Browserify or Node.js, you can install via NPM.

$ npm install async-while

Usage

First, load async while. By default, the global Promise object is used, but you can create a while generator with a custom Promise class, too.

// simple
var asyncWhile = require("async-while");

// while with Bluebird promises
var Promise = require("bluebird");
var asyncWhile = require("async-while").generate(Promise);

Now, generate a while function with asyncWhile. You'll need two functions: a synchronous condition and an action.

var myWhile = asyncWhile(
  function (data) {
    // synchronous conditional
    return true;
  },
  function (data) {
    // loop content goes here
    return doSomethingAsync(data);
  }
);

This is just a method that can be called directly or used in .then() statements.

myWhile(somedata).then(function (result) {
  console.log(result);
});

// or
someAsyncAction()
  .then(myWhile)
  .then(function (result) {
    console.log(result);
  });

Here is a common use case of the while loop, processing list items in a series:

function eachSeries(items, onEach, ctx) {
  var index = -1;

  return asyncWhile(
    function () {
      // bump index before every loop
      index++;

      // synchronously checks if there are more
      return index < items.length;
    },
    function () {
      return onEach.call(ctx, items[index], index, items);
    }
  )();
}