Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Asynchronous functions made funky!

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 docs
Octocat-spinner-32 lib
Octocat-spinner-32 tests
Octocat-spinner-32 .gitignore
Octocat-spinner-32 Makefile
Octocat-spinner-32 README.md
Octocat-spinner-32 index.js
Octocat-spinner-32 package.json
README.md
 ,dPYb,                           ,dPYb,
 IP'`Yb                           IP'`Yb
 I8  8I                           I8  8I
 I8  8'                           I8  8bgg,
 I8 dP  gg      gg   ,ggg,,ggg,   I8 dP" "8
 I8dP   I8      8I  ,8" "8P" "8,  I8d8bggP"
 I8P    I8,    ,8I  I8   8I   8I  I8P' "Yb,
,d8b,_ ,d8b,  ,d8b,,dP   8I   Yb,,d8    `Yb,
PI8"8888P'"Y88P"`Y88P'   8I   `Y888P      Y8
 I8 `8,
 I8  `8,
 I8   8I
 I8   8I
 I8, ,8'
  "Y8P'

Asynchronous functions made funky!

What the funk?

Funk is a little module that helps you with the serial and parallel asynchronous pattern.

Instalation

npm install funk

API

funk usage is really simple. You don't need to learn any DSL or weird hacks, just wrap your callbacks and let the groove do the rest.

Constructor (pattern) -> Funk

Accepts a string that can be either parallel or serial, depending on the pattern you want to implement.

var funk = require('funk')('serial');

set (name, value) -> undefined

Save results that will then be recovered on the run callback.

var funk = require('funk')('serial');

setTimeout(funk.add(function () {
  funk.set('foo', 'bar');
}, 100);

funk.run(function () {
  assert.equals(this.foo, 'bar');
});

get (name) -> *

Retrieve results previously saved.

var funk = require('funk')('serial');

setTimeout(funk.add(function () {
  funk.set('foo', 'bar');
}, 100);

funk.run(function () {
  assert.equals(funk.get('foo'), 'bar');
});

add (function) -> Function

Adds a callback to be executed either in parallel or serial.

var funk = require('funk')('parallel');

setTimeout(funk.add(function () {
  funk.set('foo', 'bar');
}, 200);

setTimeout(funk.add(function () {
  funk.set('bar', 'foo');
}, 100);

funk.run(function () {
  assert.equals(funk.get('foo'), 'bar');
  assert.equals(funk.get('bar'), 'foo');
});

nothing () -> Function

Adds the callback to funk and does nothing with the result

var funk = require('funk')('parallel');

setTimeout(funk.nothing());
setTimeout(funk.nothing());

funk.run(function () {
  // both setTimeout are called
});

result (name, value) -> Function

Adds the callback to funk and sets the value.

var funk = require('funk')('parallel');

fs.readFile("./foo.txt", 'utf-8', funk.result('file1'));
fs.readFile("./bar.txt", 'utf-8', funk.result('file2'));

funk.run(function () {
  assert.equal(this.file1, 'foo\n');
  assert.equal(this.file2, 'bar\n');
});

result (callback, onError) -> undefined

Will run all the added functions in serial or parallel and call callback when all are done. this holds all the results setted with set and the errors.

If a onError callback is implemented it will be called only on getting the first error, ignorign the following requests.

// serial example without declaring `onError` callback
var funk = require('./../')('serial'),
    order = 0;

funk.name = 'fleiba';
funk.results = [];

setTimeout(funk.add(function () {
  order += 1;
  funk.set('order_first', order);
}), 200);

fs.readFile(__dirname + "/data/doo.txt", 'utf-8', funk.add(function () {
  order += 1;
  funk.set('order_foo', order);
}));

fs.readFile(__dirname + "/data/gar.txt", 'utf-8', funk.add(function () {
  order += 1;
  funk.set('order_bar', order);
}));

funk.run(function () {
  assert.equal(this.order_first, 1);
  assert.equal(this.order_foo, 2);
  assert.equal(this.order_bar, 3);
  assert.equal(this.errors.length, 2); // none of the 2 files exists
  done();
});

Tests

funk is fully tested using testosterone.

In order to run the tests type:

make
Something went wrong with that request. Please try again.