API Docs for: 3.17.2
Show:

File: parallel/js/parallel.js

  1.  
  2. /**
  3. * A concurrent parallel processor to help in running several async functions.
  4. * @module parallel
  5. * @main parallel
  6. */
  7.  
  8. /**
  9. A concurrent parallel processor to help in running several async functions.
  10.  
  11. var stack = new Y.Parallel();
  12.  
  13. for (var i = 0; i < 15; i++) {
  14. Y.io('./api/json/' + i, {
  15. on: {
  16. success: stack.add(function() {
  17. Y.log('Done!');
  18. })
  19. }
  20. });
  21. }
  22.  
  23. stack.done(function() {
  24. Y.log('All IO requests complete!');
  25. });
  26.  
  27. @class Parallel
  28. @param {Object} o A config object
  29. @param {Object} [o.context=Y] The execution context of the callback to done
  30.  
  31.  
  32. */
  33.  
  34. Y.Parallel = function(o) {
  35. this.config = o || {};
  36. this.results = [];
  37. this.context = this.config.context || Y;
  38. this.total = 0;
  39. this.finished = 0;
  40. };
  41.  
  42. Y.Parallel.prototype = {
  43. /**
  44. * An Array of results from all the callbacks in the stack
  45. * @property results
  46. * @type Array
  47. */
  48.  
  49. results: null,
  50. /**
  51. * The total items in the stack
  52. * @property total
  53. * @type Number
  54. */
  55. total: null,
  56. /**
  57. * The number of stacked callbacks executed
  58. * @property finished
  59. * @type Number
  60. */
  61. finished: null,
  62. /**
  63. * Add a callback to the stack
  64. * @method add
  65. * @param {Function} fn The function callback we are waiting for
  66. */
  67. add: function (fn) {
  68. var self = this,
  69. index = self.total;
  70.  
  71. self.total += 1;
  72.  
  73. return function () {
  74. self.finished++;
  75. self.results[index] = (fn && fn.apply(self.context, arguments)) ||
  76. (arguments.length === 1 ? arguments[0] : Y.Array(arguments));
  77.  
  78. self.test();
  79. };
  80. },
  81. /**
  82. * Test to see if all registered items in the stack have completed, if so call the callback to `done`
  83. * @method test
  84. */
  85. test: function () {
  86. var self = this;
  87. if (self.finished >= self.total && self.callback) {
  88. self.callback.call(self.context, self.results, self.data);
  89. }
  90. },
  91. /**
  92. * The method to call when all the items in the stack are complete.
  93. * @method done
  94. * @param {Function} callback The callback to execute on complete
  95. * @param {Mixed} callback.results The results of all the callbacks in the stack
  96. * @param {Mixed} [callback.data] The data given to the `done` method
  97. * @param {Mixed} data Mixed data to pass to the success callback
  98. */
  99. done: function (callback, data) {
  100. this.callback = callback;
  101. this.data = data;
  102. this.test();
  103. }
  104. };
  105.