2014-02-14 3 views
1

У меня есть 3 функции, которые выполняют вызов ajax каждый и должны вызываться один за другим. func B() для доступа к значению доступа A() и C() для B(). http://jsfiddle.net/NYPy6/Выполнение суммы вызовов Ajax

Я прикован эти функции так:

A().then(B).then(C); 

Как я могу добавить еще одну функцию D(), которая суммирует результат всех трех функций с использованием отложенных.

Редактировать: Мой вопрос заключается в том, что написать в D(), чтобы я мог получить доступ к значениям A + B + C. Как показано в скрипте, это json-файл, поэтому мне нужно получить доступ к содержимому json как resA.data, resB.data и т. д. и, наконец, добавить resA.data + resB.data в D(). Файл json содержит только одну строку: 1 и так далее.

+0

'A(), а затем (В) .then (C) .then (D).'?! –

ответ

0

Вы можете попробовать:

A().then(B).then(C).done(D); 
+0

что я напишу в D()? – Thomasmkov

+0

Функция 'D' должна принимать все аргументы из предыдущей функции, поэтому' function D (a, b, c) {} ' – hsz

+0

Извините, вы можете показать код – Thomasmkov

1

Вот как цепь вместе (в порядке убывания) куча функций. Функция D() не должна содержать сумму; вы можете построить сумму по мере продвижения. Используя then(), параметр передается следующей функции является результатом предыдущего в цепочке:

function A() { 
    return { 
     data: 1 
    }; 
} 

function B(a) { 
    return { 
     data: a.data + 2 
    }; 
} 

function C(b) { 
    return { 
     data: b.data + 3 
    }; 
} 

function D(final) { 
    alert('The sum is ' + final.data); 
} 

var sum = $.Deferred(); 
sum.then(A).then(B).then(C).done(D); 
sum.resolve(); // Alerts "The sum is 6" 

Если вам нужно передать параметр в A() начать цепочку, это легко. Просто изменить определение A() немного:

function A(init) { 
    return { 
     data: init 
    }; 
} 

А затем передать значение в метод resolve():

sum.resolve(10); // Alerts "The sum is 15" 

Этот пример явно надуманный. Вам нужно будет заменить A, B и C с вашими реализациями AJAX, например .:

function A() { 
    return $.ajax({ ... }); 
} 
+0

не будет всегда «1» здесь? Я хочу получить сумму A + B + C, и они являются независимыми функциями. Я не понимаю, как n будет содержать возвращаемые значения всех этих функций – Thomasmkov

+0

также это json-файл. Поэтому мне нужен доступ к чему-то вроде resA.data – Thomasmkov

+0

@Thomasmkov: 'arguments' - это специальное ключевое слово, содержащее массив аргументов, переданных функции. Этот массив будет содержать результат, возвращаемый с каждого из ранее разрешенных отложенных объектов. Мой пример явно надуман, вам придется настроить его, чтобы потреблять фактические типы данных и объекты, возвращаемые вашими отсрочками. –

Смежные вопросы