neft
Version:
Universal Platform
141 lines (103 loc) • 5.81 kB
Markdown
> [Wiki](Home) ▸ [[API Reference|API-Reference]] ▸ [[Utils|Utils-API]] ▸ **Asynchronous**
# Asynchronous
Access it with:
```javascript
var utils = require('utils');
var async = utils.async;
```
> [`Source`](/Neft-io/neft/blob/424af89110bb230ada07bbf14513166030bceb95/src/utils/async.litcoffee)
## Table of contents
* [Asynchronous](#asynchronous)
* [forEach](#foreach)
* [**Class** Stack](#class-stack)
* [add](#add)
* [callNext](#callnext)
* [runAll](#runall)
* [runAllSimultaneously](#runallsimultaneously)
##forEach
<dl><dt>Syntax</dt><dd><code>forEach(*NotPrimitive* array, *Function* callback, [*Function* onEnd, *Any* context])</code></dd><dt>Parameters</dt><dd><ul><li>array — <a href="/Neft-io/neft/wiki/Utils-API#isprimitive">NotPrimitive</a></li><li>callback — <i>Function</i></li><li>onEnd — <i>Function</i> — <i>optional</i></li><li>context — <i>Any</i> — <i>optional</i></li></ul></dd></dl>
This is an asynchronous version of the standard `Array.prototype.forEach()` function
which works with arrays and objects.
The given callback function is called with parameters:
- if an array given: element value, index, array, next callback
- if an object given: key, value, object, next callback
```javascript
var toLoadInOrder = ['users.json', 'families.js', 'relationships.js'];
utils.async.forEach(toLoadInOrder, function(elem, i, array, next){
console.log("Load " + elem + " file");
// on load end ...
next();
}, function(){
console.log("All files are loaded!");
});
// Load users.json
// Load families.json
// load relationships.json
// All files are loaded!
```
> [`Source`](/Neft-io/neft/blob/424af89110bb230ada07bbf14513166030bceb95/src/utils/async.litcoffee#foreachnotprimitive-array-function-callback-function-onend-any-context)
##**Class** Stack
<dl><dt>Syntax</dt><dd><code>**Class** Stack()</code></dd></dl>
Stores functions and runs them synchronously or asynchronously.
```javascript
var stack = new utils.async.Stack;
function load(src, callback){
console.log("Load " + src + " file");
// load file async ...
// first callback parameter is an error ...
callback(null, "fiel data");
};
stack.add(load, null, ['items.json']);
stack.add(load, null, ['users.json']);
stack.runAllSimultaneously(function(){
console.log("All files have been loaded!");
});
// Load items.json file
// Load users.json file
// All files have been loaded!
// or ... (simultaneous call has no order)
// Load users.json file
// Load items.json file
// All files have been loaded!
```
> [`Source`](/Neft-io/neft/blob/424af89110bb230ada07bbf14513166030bceb95/src/utils/async.litcoffee#class-stack)
###add
<dl><dt>Syntax</dt><dd><code>Stack::add(*Function* function, [*Any* context, *NotPrimitive* arguments])</code></dd><dt>Prototype method of</dt><dd><i>Stack</i></dd><dt>Parameters</dt><dd><ul><li>function — <i>Function</i></li><li>context — <i>Any</i> — <i>optional</i></li><li>arguments — <a href="/Neft-io/neft/wiki/Utils-API#isprimitive">NotPrimitive</a> — <i>optional</i></li></ul></dd></dl>
Adds the given function to the stack.
The function must provide a callback argument as the last argument.
The first argument of the callback function is always an error.
```javascript
var stack = new utils.async.Stack;
function add(a, b, callback){
if (isFinite(a) && isFinite(b)){
callback(null, a+b);
} else {
throw "Finite numbers are required!";
}
}
stack.add(add, null, [1, 2]);
stack.runAll(function(err, result){
console.log(err, result);
});
// null 3
stack.add(add, null, [1, NaN]);
stack.runAll(function(err, result){
console.log(err, result);
});
// "Finite numbers are required!" undefined
```
> [`Source`](/Neft-io/neft/blob/424af89110bb230ada07bbf14513166030bceb95/src/utils/async.litcoffee#stackaddfunction-function-any-context-notprimitive-arguments)
###callNext
<dl><dt>Syntax</dt><dd><code>Stack::callNext([*Array* arguments], *Function* callback)</code></dd><dt>Prototype method of</dt><dd><i>Stack</i></dd><dt>Parameters</dt><dd><ul><li>arguments — <i>Array</i> — <i>optional</i></li><li>callback — <i>Function</i></li></ul></dd></dl>
Calls the first function from the stack and remove it.
> [`Source`](/Neft-io/neft/blob/424af89110bb230ada07bbf14513166030bceb95/src/utils/async.litcoffee#stackcallnextarray-arguments-function-callback)
###runAll
<dl><dt>Syntax</dt><dd><code>Stack::runAll([*Function* callback, *Any* callbackContext])</code></dd><dt>Prototype method of</dt><dd><i>Stack</i></dd><dt>Parameters</dt><dd><ul><li>callback — <i>Function</i> — <i>optional</i></li><li>callbackContext — <i>Any</i> — <i>optional</i></li></ul></dd></dl>
Calls all functions from the stack one by one.
When an error occurs, processing stops and the callback function is called with the got error.
> [`Source`](/Neft-io/neft/blob/424af89110bb230ada07bbf14513166030bceb95/src/utils/async.litcoffee#stackrunallfunction-callback-any-callbackcontext)
###runAllSimultaneously
<dl><dt>Syntax</dt><dd><code>Stack::runAllSimultaneously([*Function* callback, *Any* callbackContext])</code></dd><dt>Prototype method of</dt><dd><i>Stack</i></dd><dt>Parameters</dt><dd><ul><li>callback — <i>Function</i> — <i>optional</i></li><li>callbackContext — <i>Any</i> — <i>optional</i></li></ul></dd></dl>
Calls all functions from the stack simultaneously (all at the same time).
When an error occurs, processing stops and the callback function is called with the got error.
> [`Source`](/Neft-io/neft/blob/424af89110bb230ada07bbf14513166030bceb95/src/utils/async.litcoffee#stackrunallsimultaneouslyfunction-callback-any-callbackcontext)