parallel-debug.js revision 16dc9aab6798bb50c391d6a5dd99c16ae95f501f
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass* A concurrent parallel processor to help in running several async functions.
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass* @module parallel
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass* @main parallel
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav GlassA concurrent parallel processor to help in running several async functions.
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass@class Parallel
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass var stack = new Y.Parallel();
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass for (var i = 0; i < 15; i++) {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass Y.io('./api/json/' + i, {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass success: stack.add(function() {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass Y.log('Done!');
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass stack.done(function() {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass Y.log('All IO requests complete!');
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass@param {Object} o A config object
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass@param {Object} [o.context=Y] The execution context of the callback to done
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav GlassY.Parallel = function(o) {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass this.config = o || {};
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * An Array of results from all the callbacks in the stack
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @property {Array} results
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * The total items in the stack
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @property {Number} total
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * The number of stacked callbacks executed
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @property {Number} finished
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * Add a callback to the stack
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @method add
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @param {Function} fn The function callback we are waiting for
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass return function () {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass self.results.push(fn.apply(self.context, arguments));
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * Test to see if all registered items in the stack have completed, if so call the callback to `done`
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @method test
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass test: function () {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass if (self.finished >= self.total && self.callback) {
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass self.callback.call(self.context, self.results, self.data);
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * The method to call when all the items in the stack are complete.
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @method done
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @param {Function} callback The callback to execute on complete
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @param {Mixed} callback.results The results of all the callbacks in the stack
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @param {Mixed} [callback.data] The data given to the `done` method
16dc9aab6798bb50c391d6a5dd99c16ae95f501fDav Glass * @param {Mixed} data Mixed data to pass to the success callback