Socket
Socket
Sign inDemoInstall

async-if-else

Package Overview
Dependencies
0
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    async-if-else

'conditional if to async control flow'


Version published
Weekly downloads
272
decreased by-23.16%
Maintainers
1
Install size
15.6 kB
Created
Weekly downloads
 

Readme

Source

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

FAQs

Last updated on 24 Oct 2015

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc