jQuery函数同步调用

时间:2015-06-18 12:49:55

标签: javascript jquery knockout.js durandal jquery-deferred

我怎么能调用一个函数,然后当它完成时,调用另一个函数传递第一个函数的返回值作为参数?我读了很多关于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中的参数。

1 个答案:

答案 0 :(得分:4)

如果a返回了一个承诺,那么当使用b

链接在一起时,它会自动将结果传递给then

因此你想要的是a().then(b)

请注意,b未与括号一起传递,这会将调用b的结果传递给链。您实际在做的是将引用传递给b到链中,并在解析b的结果后说“呼叫a。” p>

以下是一个实例,演示了:http://jsfiddle.net/9wvb1d2a/