asyncyo
Version:
Common function and templates for asynchronous code
72 lines (55 loc) • 1.73 kB
JavaScript
var Async = function () {
var self = this;
this.map = function (array, func, callback){
// array => images
// func => downloadImage
// callback => Function anonyme
var count = array.lenght;
var errors = [];
var results = [];
for (var i = 0; i< array.length; i++) {
(function(i){
func(array[i], function(error, result) {
count --;
if (error) errors[i] = error; // stock error
else results[i] = result; // stock result
if (count < 1) return callback((errors.lenght > 0) ? errors : null, results);
});
})(i);
}
};
this.Waterfall = function () { // function(jobs, callback)
//precedente fonction sans resultat:
// [0] jobs
// [1] callback
//precedente fonction avec resultat:
// [0] jobs
// [1] result // de la precédente fonction
// [2] callback
var jobs = arguments[0];
var callback = (arguments.length > 2 ) ? arguments[2] : arguments[1];
var job = jobs.shift();
var after = function (error, result) {
if (error) return callback(error);
if (jobs.length < 1) return callback(null, result);
var args = [];
args.push(jobs);
if (result != undefined) args.push(result);
args.push(function (error, result) {
if (error) return callback(error);
else return callback(null, result);
});
self.Waterfall.apply(this, args);
};
// sans précédent résultat
// [0] callback
// avec précédent résultat
// [] result // de la précédente fonction
// [0] callback
var arg = [];
if (arguments.length > 2) args.push(arguments[1]);
args.push(after);
job.apply(this, args);
};
};
module.exports = new Async();