我怎么能调用一个函数,然后当它完成时,调用另一个函数传递第一个函数的返回值作为参数?我读了很多关于Deferred
的内容,但无法弄清楚它是如何运作的。
https://api.jquery.com/category/deferred-object/
https://api.jquery.com/jQuery.Deferred/等等主要是关于SO ..
以下是一些示例:
function a() {
new amodel.AModel().save(vm.elem).done(function(_elem) {
vm.elem(_elem);
}).fail(function(error) {
...
});
function b(param) {
...
} //should call this with the a() return value
我试着让它像以下一样工作:
$.when(a()).then(b());
这样我就无法传递参数,而且我甚至不确定它是否符合我的要求。
更新
抱歉,我写错了。我不必将返回值作为参数传递,因为当函数a
运行并完成时,它会设置将用于ajax调用的值(vm.elem(_elem)
)'函数b
中的参数。
答案 0 :(得分:4)
如果a
返回了一个承诺,那么当使用b
then
因此你想要的是a().then(b)
。
请注意,b
未与括号一起传递,这会将调用b
的结果传递给链。您实际在做的是将引用传递给b
到链中,并在解析b
的结果后说“呼叫a
。” p>
以下是一个实例,演示了:http://jsfiddle.net/9wvb1d2a/