Я ищу совет по расширению a previous accepted answer в отношении прикованных аякс-запросов.Цепочка асинхронного запроса
Следующее решение асинхронно-цепи, был предложен последовательности 3 запроса Ajax:
var step_3 = function() {
c.finish();
};
var step_2 = function(c, b) {
ajax(c(b.somedata), step_3);
};
var step_1 = function(b, a) {
ajax(b(a.somedata), step_2);
};
ajax(a, step_1);
Это очень удобно для небольшого заранее определенного количества сцепленных функций Ajax, но не очень хорошо масштабироваться на случай переменной число таких функций.
Я попытался сделать следующее, но, похоже, столкнулись с проблемами определения объема из-за моей признал отсутствие опыта JavaScript:
var asynch = function (options, fNext) {// do something asynchronously}
var chain = {f:[]} // chain of asynchronous functions
var args = function(n){ //return arguments to feed n'th asynch function }
for (n=0;n<N;n++)
{
var a = args(n);
var ftmp = n==N-1? function(){} : chain.f[n+1]
chain.f[n] = function() {asynch(a, ftmp)}
}
chain.f[0]() // initiate asynchronous chain
Что это вы пытаетесь сделать здесь? Вы вообще делаете документ? DOM? Если нет, если вы используете это для вычисления некоторых данных или для обслуживания некоторых данных, то вы можете избежать использования AJAX и попробовать веб-работников. – Mike
Возможно, вам стоит заглянуть в отличную библиотеку асинхронизации: https://github.com/caolan/async и интерфейс обещания jQuery: http://api.jquery.com/category/deferred-object/ – David
Похоже, у вас есть Задача области видимости здесь: 'chain.f [n] = function() {asynch (a, ftmp)}' 'a' и' ftmp' всегда будет равным значению последней итерации через цикл for. классический для проблемы охвата цикла, решается путем предоставления каждой итерации цикла for частного доступа. –