{"_id":"if-async","_rev":"26-44319006ce9d067eb178ae21c80a2a76","name":"if-async","description":"async conditional execution for async.js or standalone usage","dist-tags":{"latest":"3.7.4"},"versions":{"1.0.0":{"name":"if-async","version":"1.0.0","keywords":["async"],"description":"async conditional execution for standalone or async.js use","main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"should":"^4.6.1"},"gitHead":"108bad0365d26ea28b5461af3deb6f2b1eef8e88","_id":"if-async@1.0.0","_shasum":"cd469c342df47a3210002ce6452e7e61ac7480cd","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"cd469c342df47a3210002ce6452e7e61ac7480cd","tarball":"https://registry.npmjs.org/if-async/-/if-async-1.0.0.tgz","integrity":"sha512-/US5Q6OIXExgO2Aa2FnJMGKcI2fRVCcfXF9KEq2OT72enZYLqarVXi8CKtIoMnEyISK12NShVKp65l3sgI5AHg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbMokjjt28Qcq9LlwDfZuNVIUuTOpW/5w4RDZ7Iwt5agIhAO1SAaunPvczcpsmmcQispKfULweiCfG/6TmKIrtqbvb"}]}},"2.0.0":{"name":"if-async","version":"2.0.0","keywords":["async"],"description":"async conditional execution for standalone or async.js use","main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"should":"^4.6.1"},"gitHead":"076fc6e7fa0ebff0d1b6ca8630aacd709c732b48","_id":"if-async@2.0.0","_shasum":"24bd9032f2485190a237d41c4eb409d1fcbca4da","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"24bd9032f2485190a237d41c4eb409d1fcbca4da","tarball":"https://registry.npmjs.org/if-async/-/if-async-2.0.0.tgz","integrity":"sha512-m8BqxcvMDhcgqLLLPvJO0/FnEjFe30O3zSwbNyvj5K77ukq1K/sWLZuTXmoJm6+gyvaW09kgc6Zz1rUtQ8BhFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHyl8l6qljCMMwf01PZpIzA5Xce0S0hcI5OLtIvxuWzwAiEAvX6RfuxlB/+KxrYLq558lDcwIAtc3o4pXTvGltPV7/g="}]}},"2.3.0":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"2.3.0","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"1c5c6bc25062197274c62558148150b3e8249c24","_id":"if-async@2.3.0","_shasum":"e472b8efc6acab0033eb0374f015534d230ac0f3","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"e472b8efc6acab0033eb0374f015534d230ac0f3","tarball":"https://registry.npmjs.org/if-async/-/if-async-2.3.0.tgz","integrity":"sha512-g+TVtAPbN0LJPEFd36fZkhL6D+uR0Ex/2eV3cZjP5SwQkSi6Khj2e3fxgKAKYiyHsxWqMuQn5PSn/WQhX+5gSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqrZaraonJROO3nrlagJMyK/ksRd4kPHiTWqhdT1E1TAiEA2NSrsgdXpmx1+ufD4p2g1H5jm/6ax9E0idOltjQO6aE="}]}},"2.3.1":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"2.3.1","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"e0a53805ccad21266ce39d59563b59fb49c0bd5e","_id":"if-async@2.3.1","_shasum":"1f09ce6cc2db6f89d687a855ead729f4a9c34da4","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"1f09ce6cc2db6f89d687a855ead729f4a9c34da4","tarball":"https://registry.npmjs.org/if-async/-/if-async-2.3.1.tgz","integrity":"sha512-Aqx2TSxpyaruJnb+rCysS37zG8uzaFtftPFPHGY3hfLMJxyNni/2pvW6Yrn/64H2gJrctHdQ5vj8ewP2Rgdc9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9XSoo0PD8BSR/Qu3op61gaa5voYGdIzFe9pxiWisWrAIgCTEetoXWYoBIdN5LEfyldM+sjm8h2tAjWb2mipwresw="}]}},"3.3.1":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"3.3.1","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"1e0283cc80530c9230eb3a23dcbefdc0019021dc","_id":"if-async@3.3.1","_shasum":"3a7dc4606b390d594b3dfccf161a6ae98d6227bc","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"3a7dc4606b390d594b3dfccf161a6ae98d6227bc","tarball":"https://registry.npmjs.org/if-async/-/if-async-3.3.1.tgz","integrity":"sha512-XKoHgqbtbRXQJk2qnaecti3yJvEAnuxCEcm1t6twFpKxy8d++tOt1vyo5YIP+b+B4cmlVkezmYeKqKavPXg//w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxjJwr2ssBqTiAmh58ghEpGZTcdhiymyl5X9xXM+aU1gIgRSddjb3Ozo3Xa+mI+Q+jIR+bBjWhYnNT8SBH++/HQaw="}]}},"3.3.2":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"3.3.2","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"c78df25519e505c3debb534acff0a5fe81115d31","_id":"if-async@3.3.2","_shasum":"53102c452fac3da5c32a956d0db790fd227211e2","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"53102c452fac3da5c32a956d0db790fd227211e2","tarball":"https://registry.npmjs.org/if-async/-/if-async-3.3.2.tgz","integrity":"sha512-w1lQeBdMTKRmNThHlLLyuSaBM2525cN+bhMHjRWycc7nCmZtKmHc3jJhjt/FRB5f/MqdpBfF48lKs4QKhszAWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJXI7saxwOLbKxZNI15uw6LgXnmcsXY53sXcwYT7lTBAIgHCJYvvNjnjFBc2P5EuUWXMrQtRpvHTNFkNQmjHa0DFY="}]}},"3.4.2":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"3.4.2","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"2e46955d6c70b517f3e9b152e4f2e3a8191847e1","_id":"if-async@3.4.2","_shasum":"b1b9a84eb9d33dc23f0dd02a50f8ce7f52526fd4","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"b1b9a84eb9d33dc23f0dd02a50f8ce7f52526fd4","tarball":"https://registry.npmjs.org/if-async/-/if-async-3.4.2.tgz","integrity":"sha512-+WfVkGQI0ZnmNoU+jlfD0GWSSQBITXeEKYsk1hlDZgbdeIN8Weybtnn/Qc9p60YxhhWUZ4X+rJbijrHZcZ02Vg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOzF16TuI0nVij2iqdOUwjkDTVsCQvM1/KOU73sxtzkwIhAId5AFDv6dIFI9Xy3+b4XjeitDrYzOIyudjf0IXUcyQb"}]}},"3.7.2":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"3.7.2","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"32a2ff7b1b96f2e58de0566bb072ccb1f85fdc52","_id":"if-async@3.7.2","_shasum":"739863cc3ca2655dc67ffb3a186ccd05bace9454","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"739863cc3ca2655dc67ffb3a186ccd05bace9454","tarball":"https://registry.npmjs.org/if-async/-/if-async-3.7.2.tgz","integrity":"sha512-SvYy6mbZVNP00O7hjV6AeEyE6aT4VfHl3VgAPuxY28eteGRImA+QIKTU6hYhCnqzBFykP5eejd8IQ4mWjAoKdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDyhmrdkcPO72ceoCD9Pklqajb5MNWItM3mQ77BxSA8hAiB6jcUHDVUW3KXRyrhIogZSgzA47tQ4hc56cqv6qiFLHg=="}]}},"3.7.3":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"3.7.3","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"40d3fce9dbc1d33a84194e8dcfea38fc5b311f1a","_id":"if-async@3.7.3","_shasum":"985aaa3ea52d5dc1f402283bcbd2d210b5e42756","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"985aaa3ea52d5dc1f402283bcbd2d210b5e42756","tarball":"https://registry.npmjs.org/if-async/-/if-async-3.7.3.tgz","integrity":"sha512-rNZFQK4yRoKsYUBYyBVyyuKiQDk8DVeHauOQBJ/GbkyDCaVOc+R4AyE33+ysrX1f15mdr3+UNqTArv+Br5ihCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/1esL/BJ6zzYOCx6mmBQTMBnDuhvp817iWahgaxU5QAiAWf3N74Y+7D7EckME+zLMnU8jfi0uhVcuYZiuL082E8A=="}]}},"3.7.4":{"name":"if-async","description":"async conditional execution for async.js or standalone usage","version":"3.7.4","keywords":["async"],"main":"index.js","scripts":{"test":"mocha -R spec"},"dependencies":{},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"homepage":"https://github.com/kessler/if-async","license":"MIT","devDependencies":{"mocha":"^2.1.0","should":"^4.6.1"},"gitHead":"eeb4b989c8dd41d6702ea34090290e7d471c1305","_id":"if-async@3.7.4","_shasum":"55868deb0093d3c67bf7166e745353fb9bcb21a2","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"yaniv","email":"yanivk@gmail.com"},"maintainers":[{"name":"yaniv","email":"yanivk@gmail.com"}],"dist":{"shasum":"55868deb0093d3c67bf7166e745353fb9bcb21a2","tarball":"https://registry.npmjs.org/if-async/-/if-async-3.7.4.tgz","integrity":"sha512-BFEH2mZyeF6KZKaKLVPZ0wMjIiWOdjvZ7zbx8ENec0qfZhJwKFbX/4jKM5LTKyJEc/GOqUKiiJ2IFKT9yWrZqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC987y9BbQU4OS+yDSrJW2eKzoL6NBoL8NZd0pgnCj/zAIhAPiDUqcwCnWK2iERJkcmEKeBKnP+JxB9vPlCfev+p7/Q"}]}}},"readme":"# if-async [![Build Status](https://secure.travis-ci.org/kessler/if-async.png?branch=master)](http://travis-ci.org/kessler/if-async)\n\nasync conditional execution for async.js or standalone usage\n\n## Example 1: Using with Async.js Series\n\n```javascript\nvar async = require('async')\nvar ifAsync = require('if-async')\n\nasync.series([\n    foo,\n    ifAsync(predicate1).and(predicate2).then(consequent12)\n        .elseIf(predicate3).then(consequent3)\n        .else(else1),\n    bar\n], function(err) {})\n\nfunction foo(callback) { ... }\nfunction predicate1(callback) { fs.stat(... callback ...) }\nfunction predicate2(callback) { fs.stat(... callback ...) }\nfunction consequent12(callback) { ... }\nfunction predicate3(callback) { fs.stat(... callback ...) }\nfunction consequent3(callback) { ... }\nfunction else1(callback) { ... }\nfunction bar(callback) { ... }\n```\n\n## Example 2: Using with Async.js waterfall\n```javascript\nvar async = require('async')\nvar ifAsync = require('if-async')\n\nasync.waterfall([\n    foo,\n    ifAsync(p1).then(c1).else(c2),\n    bar\n], function(err) {})\n\nfunction foo(callback) {\n    callback(null, 1)\n}\n\nfunction p1(a, callback) {\n    console.log(a) // prints 1\n    callback(null, true) // this will cause c1 to be executed rather than c2\n}\n\nfunction c1(a, callback) {\n    console.log(a) // prints 1\n    callback(null, 2)\n}\n\nfunction c2(a, callback) {\n    console.log(a) // prints 1\n    callback(null, 3)\n}\n\nfunction bar(a, callback) {\n    console.log(a) // prints 2 because the c1 passed 2 in the callback\n    callback()\n}\n```\n\n## Example 3: Standalone usage\n\n```javascript\nvar ifAsync = require('if-async')\n\nvar functor = ifAsync(predicate).then(consequent).else(elseClause)\n\nfunctor(function(err) {\n    console.log('done')\n})\n\nfunction predicate(callback) { fs.stat(... callback ...) }\nfunction consequent(callback) { ... }\nfunction elseClause(callback) { ... }\n```\n\n\n## API Reference\nTwo main concepts that are used throughout this reference are predicate and consequent.\n\n#### Predicate\nin the context of ifAsync, a predicate is an async function that calls back with an error or a value. That value evaluates to true or false. e.g\n```javascript\nfunction predicate(callback) {\n    if (bar) return callback(null, 1)\n    else if (foo) return callback() // same as  callback(null, false)\n    else return callback(new Error('fail'))\n}\n```\n\n#### Consequent\nin the context of ifAsync a consequent is an async function that is invoked as a result of an evaluation of a predicate, e.g\n```javascript\nfunction consequent(callback) {\n    callback(null, 'dont care')    \n}\n```\n\n#### ifAsync(Array|Function)\nCall this function with an array of functions or a single function the return value is a new function that will run all the logic and invoke a callback parameter in the end:\n\n```javascript\n    var functor = ifAsync(f1, f2, f3)\n    \n    functor(function(err) {\n        // f1 is evaluated and then f2 or f3 will be called accordingly, then this callback is called\n    })\n```\n\nWhen calling with an array of functions, the array is divided into pairs. The pair's first member is a predicate and the second is a consequent. If the array contains an odd number of functions then the last function is considered the default consequent (else clause)\n\nWhen calling with a single function, it is considered a predicate and the user is expected to call then() at least once (an error will be thrown otherwise)\n\nBoth array style calls and fluent interface can be mixed. e.g ```ifAsync(f1,f2).elseIf(f3).then(f4)``` which is equivalent to ```ifAsync(f1).then(f2).elseIf(f3).then(f4)```\n\n#### ifAsync.not(Function)\nSame as ifAsync, only this call only accepts a predicate function and will negate its result\n\n#### .then(Function) \n```javascript\nifAsync(Function f1).then(Function f2)\n```\nf1 is a predicate and f2 is a consequent. Each ifAsync must include at least one then consequent\n\n#### .and(Function) \n```javascript\nifAsync(Function f1).and(Function f2).then(Function f3)\n```\nconnect predicates f1 and f2 with a logical AND operator\n\n#### .and.not(Function)\nsame as and() only negate the result of the predicate\n\n#### .or(Function)\n```javascript\n ifAsync(Function f1).or(Function f2).then(Function f3)\n```\nconnect predicates f1 and f2 with a logical OR operator\n\n#### .or.not(Function)\nsame as or() only negate the result of the predicate\n\n#### .elseIf(Function)\n```javascript\nifAsync(Function f1).then(Function f2).elseIf(Function f3).then(Function f4)\n```\nevaluate the first predicate (f1) if it evalutes to true then run consequent f2 otherwise evaluate f3 and if that is true, run consequent f4\nelseIf() is case insensitive, you can also use elseif() \n\n#### .elseIf.not(Function)\nsame as elseIf() only negate the result of the predicate\n\n#### .else(Function)\n```javascript\nifAsync(Function f1).then(Function f2).else(Function f3)\n```\nThe default consequent, it is optional and is executed if f1 predicate above evaluates to false\n","maintainers":[{"email":"yanivk@gmail.com","name":"kessler"},{"email":"yanivk@gmail.com","name":"yaniv"}],"time":{"modified":"2022-06-19T00:15:01.479Z","created":"2015-01-21T16:53:54.865Z","1.0.0":"2015-01-21T16:53:54.865Z","2.0.0":"2015-01-25T17:16:53.574Z","2.3.0":"2015-01-25T18:48:35.005Z","2.3.1":"2015-01-25T18:50:22.152Z","3.3.1":"2015-01-26T17:50:12.184Z","3.3.2":"2015-01-27T01:12:20.283Z","3.4.2":"2015-01-27T02:18:39.042Z","3.7.2":"2015-01-28T23:32:10.780Z","3.7.3":"2015-01-29T01:33:03.209Z","3.7.4":"2015-01-29T03:41:45.850Z"},"homepage":"https://github.com/kessler/if-async","keywords":["async"],"repository":{"type":"git","url":"https://github.com/kessler/if-async"},"author":{"name":"Yaniv Kessler"},"bugs":{"url":"https://github.com/kessler/if-async/issues"},"license":"MIT","readmeFilename":"README.md","users":{}}