callbackmaybe

I just met you / and this is crazy / but here's a module / CallbackMaybe

npm install callbackmaybe
3 downloads in the last week
12 downloads in the last month

node-callbackmaybe

A module that makes it easy to support both event emitters and callbacks in your node.js API methods.

Build Status

Usage


var CallbackMaybe = require('callbackmaybe');

YourModule.prototype.someMethod(param, callback) {

  var cbm = new CallbackMaybe(callback, options);

  anEmittingFunction().on('foo', function(foo) {
    cbm.write('Do something with ' + foo);
  }).on('end', function() {
    cbm.end();
  }).on('error', function(err) {
    cbm.error(err);
  });

  return(cbm);

};

In the above example, if someMethod is passed a callback, the callback will be invoked with an array of the items written via cbm.write(). The callback will be invoked with an error if cbm.error() is called.

With or without a callback, an EventEmitter is returned which will emit a data event for each item written and an end event with a count of items emitted. An error event is emitted if cbm.error() is called.

A method implemented as above will support the following access methods:


yourModule.someMethod(function(err, results) {
  // an array of results or an error
});

yourModule.someMethod().on('data', function(data) {
  // each result, one at a time
});

yourModule.someMethod().on('end', function(count) {
  // An easy way to get a count of results
});

You can present the same interface options even if you only have access to an array internally:


YourModule.prototype.anotherMethod(param, callback) {

  var cbm = new CallbackMaybe(callback, options);

  aListFunction(function(results) {
    cbm.write(results);
    cbm.end();
  });

  return(cbm);

};

anotherMethod will have the same access methods as someMethod above.

Currently only one option is supported:

  • limit - the maximum number of items to emit or pass to the callback. Calls to write after the limit is reached will return false.

Install

  npm install callbackmaybe

Dependencies

This library has no production dependencies, only the following test dependencies:

npm loves you