Предположим, что я смог получить ($.ajax
), процесс (process_*
) и сохранение (store_* =
) данные A
и B
независимо друг от друга, и уже есть API:Дизайн API: Как я могу объединить результат двух отложенных объектов jQuery?
var store_A;
function A() {
$.ajax({url: "/getA"}).done(function(data) {
store_A = process_A(data);
}); }
var store_B;
function B() {
$.ajax({url: "/getB"}).done(function(data) {
store_B = process_B(data);
}); }
У меня есть функция C()
, которая способна объединить store_A
и store_B
в что-то:
var store_C;
function C() {
store_C = process_C(store_A, store_B);
}
Пусть A()
, B()
и C()
является открытым API и Другим материалом является внутренность и действительно сложный код (так, например, я не могу напрямую связать $.ajax
).
Я хочу, чтобы реорганизовать выше кода к новым API с помощью jQuery Deferred API, так что я могу запросить любой случай:
case1: after(A).do(C)
case1: after(B).do(C)
case2: afterParallelJobsFinished(A, B).do(C)
и быть уверенным, что store_A
или store_B
обновляется в соответствии с просьбой и store_C
обновления только после обновления одного или обоих от A/B, как требовалось.
Imaging, что у нас есть webapp, где пользователь управляет множеством доходов и расходов.
На странице загрузки мы получаем доходы и расходы от различных источников данных (то есть $.ajax
) параллельно, делают вид и сохранять данные (обычно это перемешаны process_*
/store_* =
) и показать total = SUM(incomes) - SUM(expenses)
когда все данные пришли ,
То, что case2
.
Когда пользователь редактирует расходы и запрашивает частичное обновление страницы, мы находимся в case1
, потому что нам нужно только загрузить/отобразить/сохранить пространства, чтобы получить правильный total = SUM(incomes) - SUM(expenses)
.
Вы можете использовать $ .when, но вам нужно сохранить обещание в store_X. – jcubic
Из двух независимых '$ .ajax()' я получаю два обещания. Как я могу объединить их? Я хочу сохранить возможность запускать 'A()' или 'B()' или 'C()' независимо. – gavenkoa