想我能得到($.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
)。
我想通过使用jQuery Deferred API,所以我可以请求任何情况下重构上面的代码到新的API:
case1: after(A).do(C)
case1: after(B).do(C)
case2: afterParallelJobsFinished(A, B).do(C)
,并确保由于只有一个或两个的更新后要求和store_C
更新store_A
或store_B
更新的A/B按要求。
想象我们有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