Path: blob/master/node_modules/asynckit/serialOrdered.js
1126 views
var iterate = require('./lib/iterate.js')1, initState = require('./lib/state.js')2, terminator = require('./lib/terminator.js')3;45// Public API6module.exports = serialOrdered;7// sorting helpers8module.exports.ascending = ascending;9module.exports.descending = descending;1011/**12* Runs iterator over provided sorted array elements in series13*14* @param {array|object} list - array or object (named list) to iterate over15* @param {function} iterator - iterator to run16* @param {function} sortMethod - custom sort function17* @param {function} callback - invoked when all elements processed18* @returns {function} - jobs terminator19*/20function serialOrdered(list, iterator, sortMethod, callback)21{22var state = initState(list, sortMethod);2324iterate(list, iterator, state, function iteratorHandler(error, result)25{26if (error)27{28callback(error, result);29return;30}3132state.index++;3334// are we there yet?35if (state.index < (state['keyedList'] || list).length)36{37iterate(list, iterator, state, iteratorHandler);38return;39}4041// done here42callback(null, state.results);43});4445return terminator.bind(state, callback);46}4748/*49* -- Sort methods50*/5152/**53* sort helper to sort array elements in ascending order54*55* @param {mixed} a - an item to compare56* @param {mixed} b - an item to compare57* @returns {number} - comparison result58*/59function ascending(a, b)60{61return a < b ? -1 : a > b ? 1 : 0;62}6364/**65* sort helper to sort array elements in descending order66*67* @param {mixed} a - an item to compare68* @param {mixed} b - an item to compare69* @returns {number} - comparison result70*/71function descending(a, b)72{73return -1 * ascending(a, b);74}757677