我有3个函数,每个函数执行ajax调用,并且必须一个接一个地调用。 func B()访问A()和C()访问值B()的访问值。 http://jsfiddle.net/NYPy6/
我已将这些功能链接起来:
A().then(B).then(C);
如何添加另一个函数D(),它使用延迟来总结所有三个函数的结果。
编辑:我的问题是在D()中写什么,以便我可以访问A + B + C的值。如小提琴所示,它是一个json文件,所以我需要访问json内容为 resA.data ,resB.data等,最后在D()中添加resA.data + resB.data。 json文件只包含一行数据:1,依此类推。
答案 0 :(得分: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"
这个例子显然是做作的。您需要使用AJAX实现替换A
,B
和C
,例如:
function A() {
return $.ajax({ ... });
}
答案 1 :(得分:0)
您可以尝试:
A().then(B).then(C).done(D);