1 var iterate = require('./lib/iterate.js')
2 , initState = require('./lib/state.js')
3 , terminator = require('./lib/terminator.js')
7 module.exports = serialOrdered;
9 module.exports.ascending = ascending;
10 module.exports.descending = descending;
13 * Runs iterator over provided sorted array elements in series
15 * @param {array|object} list - array or object (named list) to iterate over
16 * @param {function} iterator - iterator to run
17 * @param {function} sortMethod - custom sort function
18 * @param {function} callback - invoked when all elements processed
19 * @returns {function} - jobs terminator
21 function serialOrdered(list, iterator, sortMethod, callback)
23 var state = initState(list, sortMethod);
25 iterate(list, iterator, state, function iteratorHandler(error, result)
29 callback(error, result);
36 if (state.index < (state['keyedList'] || list).length)
38 iterate(list, iterator, state, iteratorHandler);
43 callback(null, state.results);
46 return terminator.bind(state, callback);
54 * sort helper to sort array elements in ascending order
56 * @param {mixed} a - an item to compare
57 * @param {mixed} b - an item to compare
58 * @returns {number} - comparison result
60 function ascending(a, b)
62 return a < b ? -1 : a > b ? 1 : 0;
66 * sort helper to sort array elements in descending order
68 * @param {mixed} a - an item to compare
69 * @param {mixed} b - an item to compare
70 * @returns {number} - comparison result
72 function descending(a, b)
74 return -1 * ascending(a, b);