error-handling

error-handling ==============

npm install error-handling
1 downloads in the last day
2 downloads in the last week
46 downloads in the last month

error-handling

At VirtuOz we love Futures. But when you use it, you end up with lots, and I do mean lots, of boilderplate error-handling code. Like this:

var Future = require('futures').future;
.
.
.
function doSomethingInTheFuture()
{
    var future = new Future()

    someAsynchronousOperation(function(err, result)
    {
        if (err)
        {
            future.fulfill(err);
            return;
        }

        // Now do something else.
        somethingElseAsynchronous(function(err, anotherResult)
        {
            if (err)
            {
                future.fulfill(err);
                return;
            }

            var myOperationResult = result + anotherResult;
            future.fulfill(undefined, myOperationResult);
        });

    });
    return future;
}


var futureResult = doSomethingInTheFuture();
futureResult.when(function(err, result))
{
    // Code to handle async return.
});

As you can see, the code to handle errors is boring and repetitive. Enter this module. It will save you time. And make you happy. Like this:

var Future = require('futures').future;
var eh = require('vnodelib').load('error-handling');
.
.
.
function doSomethingInTheFuture()
{
    var future = new Future()
    var wrap = eh.createWrapperFromFuture(future);

    someAsynchronousOperation(wrap(function(result)
    {
        // Now do something else.
        somethingElseAsynchronous(wrap(function(anotherResult)
        {
            var myOperationResult = result + anotherResult;
            future.fulfill(undefined, myOperationResult);
        }));

    }));
    return future;
}


var futureResult = doSomethingInTheFuture();
futureResult.when(function(err, result))
{
    // Code to handle async return.
});

See? Lots of boilerplate cut out of the picture.

Of course, you needn't just use error-handling with Future. You can do it like this:

var eh = require('vnodelib').load('error-handling');
.
.
.
function doSomethingInTheFuture(callback)
{
    var wrap = eh.createWrapperFromCallback(function(err)
    {
        // Custom logging or whatever goes here.

        // Tell the callback that something really bad happened.
        callback(err);
    });

    someAsynchronousOperation(wrap(function(result)
    {
        // Now do something else.
        somethingElseAsynchronous(wrap(function(anotherResult)
        {
            var myOperationResult = result + anotherResult;
            callback(undefined, myOperationResult);
        }));

    }));
    return future;
}

If you're still not convinced, try using Future or even the standard async pattern where errors are involved, for anything other than a trivial example. You'll be sad. Then you can come back here. And be happy.

npm loves you