async-if-else

1.1.1 • Public • Published

async-if-else

This module adds if else conditional capabilities to async module.

Ever came across code like this on your async.waterfall flow?

var async = require('async');
 
async.waterfall([
  async.constant({email: 'thiago@email.com', dogs: 2, money: 0, fun: 100 }),
  updateUserEmailOrGetLegacy,
  sendEmail
], handler);
 
function updateUserEmailOrGetLegacy(user, cb) {
  emailExists(user.email, function (err, value) {
    if (err)
      callback(err)
    else {
      if (user.email)
        updateAccount(user, cb);
      else
        importFromLegacyByEmail(user, cb)
    }
  })
}

Using async-if-else you can have a conditional waterfall without the need of a wrapper function.
And the code is so much more readable, don't you agree?

var async = require('async-if-else')(require('async'));
 
function emailExists(user, callback) {
  user.find(user.email, function(err, dbUser){
    if (err)
      return callback(error);
      
     if(!dbUser)
       return callback(null, false); // does not exist, predicate will be false
       
     callback(null, true);  
  });
}
 
function updateAccount(user, callback) { 
  user.update( ..., callback);
}
 
function importFromLegacyByEmail(user, callback) { 
  remoteClient.get(user, callback);
}
 
async.waterfall([
  async.constant({email: 'thiago@email.com', dogs: 2, money: 0, fun: 100 }),
  async.if(emailExists, updateAccount).else(importFromLegacyByEmail),
  sendEmail
], handler);

You can also omit the else and the function is only executed if the predicate is true.

var async = require('async-if-else')(require('async'));
 
async.waterfall([
  async.constant({email: 'thiago@email.com', dogs: 2, money: 0, fun: 100 }),
  async.if(emailExists, auditLogging),
  publishToQueue
], handler);

if you don't want to change the async object, you can always do something like that

var async = require('async');
var conditional = require('async-if-else')({});
 
async.waterfall([
  async.constant({email: 'thiago@email.com', dogs: 2, money: 0, fun: 100 }),
  conditional.if(emailExists, auditLogging),
  publishToQueue
], handler);
 

API

async.if()
async.if().else()
async.ifNot()
async.ifNot().else()
async.unless() 
async.unless().else()
### initializer To get start with async-if-else you need to provide an object.
 var conditionals = require('async-if-else')({});
 var async = require('async-if-else')(require('async'));
### if **if** function receives the predicate and the expression.
async.if(predicateFn, expressionFn)
  • predicateFn must validate the argument received from waterfall chain
  function predicateFn(arg1 [, arg2 ...], callback) {}

callback signature is callback(error, truthyValue|falsyValue);
if you pass an error on first parameter the async.waterfall will skip below steps and goes directly to async.waterfall's callback function.

  • expressionFn will execute when predicate is thruthy.
  function expressionFn(arg1 [,arg2...], asyncWaterfallCallback)
### else **else** receives only an elseExpressionFn
async.if(predicateFn, expressionFn).else(elseExpressionFn);
  • elseExpressionFn is executed when the if predicate is falsy or ifNot predicate is truthy.
    function elseExpressionFn(arg1 [,arg2...], asyncWaterfallCallback)
### ifNot

ifNot works as the opposite of If receives exactly the same arguments

async.ifNot(predicateFn, expressionFn)

you could use with else as well

async.ifNot(predicateFn, expressionFn).else(elseExpressionFn)
### unless just an alias to [`ifNot`](#ifNot).

Hey, did you found an issue?

The best way to get in touch is using the GitHub issues section.
If you can't find someone with the problem you are facing open a new issue and let me know.
If you manage to find a solution for your problem, you can submit a new PR :)

Let's make the world a better place by helping others.

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i async-if-else

Weekly Downloads

386

Version

1.1.1

License

MIT

Last publish

Collaborators

  • tdantas