You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.7 KiB
114 lines
2.7 KiB
/*
|
|
YUI 3.17.2 (build 9c3c78e)
|
|
Copyright 2014 Yahoo! Inc. All rights reserved.
|
|
Licensed under the BSD License.
|
|
http://yuilibrary.com/license/
|
|
*/
|
|
|
|
YUI.add('parallel', function (Y, NAME) {
|
|
|
|
|
|
/**
|
|
* A concurrent parallel processor to help in running several async functions.
|
|
* @module parallel
|
|
* @main parallel
|
|
*/
|
|
|
|
/**
|
|
A concurrent parallel processor to help in running several async functions.
|
|
|
|
var stack = new Y.Parallel();
|
|
|
|
for (var i = 0; i < 15; i++) {
|
|
Y.io('./api/json/' + i, {
|
|
on: {
|
|
success: stack.add(function() {
|
|
})
|
|
}
|
|
});
|
|
}
|
|
|
|
stack.done(function() {
|
|
});
|
|
|
|
@class Parallel
|
|
@param {Object} o A config object
|
|
@param {Object} [o.context=Y] The execution context of the callback to done
|
|
|
|
|
|
*/
|
|
|
|
Y.Parallel = function(o) {
|
|
this.config = o || {};
|
|
this.results = [];
|
|
this.context = this.config.context || Y;
|
|
this.total = 0;
|
|
this.finished = 0;
|
|
};
|
|
|
|
Y.Parallel.prototype = {
|
|
/**
|
|
* An Array of results from all the callbacks in the stack
|
|
* @property results
|
|
* @type Array
|
|
*/
|
|
|
|
results: null,
|
|
/**
|
|
* The total items in the stack
|
|
* @property total
|
|
* @type Number
|
|
*/
|
|
total: null,
|
|
/**
|
|
* The number of stacked callbacks executed
|
|
* @property finished
|
|
* @type Number
|
|
*/
|
|
finished: null,
|
|
/**
|
|
* Add a callback to the stack
|
|
* @method add
|
|
* @param {Function} fn The function callback we are waiting for
|
|
*/
|
|
add: function (fn) {
|
|
var self = this,
|
|
index = self.total;
|
|
|
|
self.total += 1;
|
|
|
|
return function () {
|
|
self.finished++;
|
|
self.results[index] = (fn && fn.apply(self.context, arguments)) ||
|
|
(arguments.length === 1 ? arguments[0] : Y.Array(arguments));
|
|
|
|
self.test();
|
|
};
|
|
},
|
|
/**
|
|
* Test to see if all registered items in the stack have completed, if so call the callback to `done`
|
|
* @method test
|
|
*/
|
|
test: function () {
|
|
var self = this;
|
|
if (self.finished >= self.total && self.callback) {
|
|
self.callback.call(self.context, self.results, self.data);
|
|
}
|
|
},
|
|
/**
|
|
* The method to call when all the items in the stack are complete.
|
|
* @method done
|
|
* @param {Function} callback The callback to execute on complete
|
|
* @param {Mixed} callback.results The results of all the callbacks in the stack
|
|
* @param {Mixed} [callback.data] The data given to the `done` method
|
|
* @param {Mixed} data Mixed data to pass to the success callback
|
|
*/
|
|
done: function (callback, data) {
|
|
this.callback = callback;
|
|
this.data = data;
|
|
this.test();
|
|
}
|
|
};
|
|
|
|
|
|
}, '3.17.2', {"requires": ["yui-base"]});
|
|
|