Javascript - XMLHttpRequest подробный анализ примера
Материал из support.qbpro.ru
Версия от 13:40, 24 августа 2013; imported>Vix (Новая страница: « <nowiki>function parallel() { var first = arguments[0]; //берем из списка аргументов первый (ну…»)
function parallel() {
var first = arguments[0]; //берем из списка аргументов первый (нулевой)
if( first ) { // если первый (нулевой) аргумент есть
var results, methods = [], callback = function(){}; //объявляем переменные
if(first.constructor === Function) { //если первый (нулевой) аргумент функция
//(коструктор объекта - функция)
results = []; //пустой массив результатов
if(arguments !== undefined) //если аргументы не undefined т.е. существуют
for( var i=0, l=arguments.length; i<l; ++i ) { //все аргументы по порядку
var value = arguments[i]; //значение i-того аргумента в кэш
if(i !== l-1) { //не могу понять смысл это выражения (если i не равно 0 в противном случае -1 , т.е false)
methods.push( value ); //добавляем значение начение i-того аргумента в конец массива methods
}
else { //иначе
callback = value; //callback присваиваем значение кэша
}
}
methods.iterate(function(func, i) { //объеку methods добавляем метод iterete
nextTick(function() {
func.call({
end : function( res ) {
methods[i].__done__ = true;
results[i] = res;
}
})
})
});
}
else {
var keys = [];
results = {};
callback = arguments[1] !== undefined ? arguments[1] : function(){};
var methodsData = first;
for( var i in first ) {
keys.push( i );
methods.push( first[i] );
}
methods.iterate(function(func, i) {
nextTick(function() {
func.call({
end : function( res ) {
methods[i].__done__ = true;
results[keys[i]] = res;
}
})
})
});
}
}
function isDone() {
var done = true;
for(var i=0, l=methods.length; i<l; ++i) {
if(!methods[i].__done__) {
done = false;
break;
}
}
return done;
}
function finish() {
nextTick(function() {
var done = isDone();
if(!done) {
finish();
}
else {
if( results.constructor === Array ) {
callback.apply( Global, results );
}
else {
callback( results );
}
}
});
}
nextTick(finish);
};
