Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery函数同步调用_Javascript_Jquery_Knockout.js_Durandal_Jquery Deferred - Fatal编程技术网

Javascript jQuery函数同步调用

Javascript jQuery函数同步调用,javascript,jquery,knockout.js,durandal,jquery-deferred,Javascript,Jquery,Knockout.js,Durandal,Jquery Deferred,如何调用一个函数,然后在调用完成后,调用另一个函数,并将第一个函数的返回值作为参数传递?我读了很多关于延迟的,但不知道它是如何工作的 等等,主要是 以下是一些示例: function a() { new amodel.AModel().save(vm.elem).done(function(_elem) { vm.elem(_elem); }).fail(function(error) { ... }); function b(param) {

如何调用一个函数,然后在调用完成后,调用另一个函数,并将第一个函数的返回值作为参数传递?我读了很多关于延迟的,但不知道它是如何工作的

等等,主要是

以下是一些示例:

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
运行并完成时,它会设置一个值(
vm.elem(_elem)
),如果
a
返回承诺,该值将用于函数
b
中ajax调用的参数,然后,当使用
then

因此,您需要的是
a(),然后是(b)

请注意,
b
不是用括号传递的,这将把调用
b
的结果传递给链。实际上,您所做的是将对
b
的引用传递到链中,并在解析
a
的结果时说“调用
b


下面是一个活生生的例子,它演示了:

如果
a
返回了一个承诺,那么当使用
then
链接在一起时,它会自动将结果传递给
b

因此,您需要的是
a(),然后是(b)

请注意,
b
不是用括号传递的,这将把调用
b
的结果传递给链。实际上,您所做的是将对
b
的引用传递到链中,并在解析
a
的结果时说“调用
b


下面是一个实时示例,演示:

您的示例不会异步执行任何操作。你有没有把它简单化了,或者你实际问题中的代码是异步的?这不是一个异步调用,但函数
b
应该在函数
a
完成后立即调用(都是ajax调用)“这不是异步调用”和“都是ajax调用”-你自相矛盾。这是真的吗?当我说它不异步时,我指的是同步,因为当函数
a
运行时,函数
b
不会被调用它应该是
函数a(){为10}
a()返回ajax调用承诺。然后(b)
您的示例不会异步执行任何操作。你有没有把它简单化了,或者你实际问题中的代码是异步的?这不是一个异步调用,但函数
b
应该在函数
a
完成后立即调用(都是ajax调用)“这不是异步调用”和“都是ajax调用”-你自相矛盾。哪一个是真的?当我说它不异步时,我指的是同步,因为当函数
a
运行时,函数
b
不会被调用。它应该是
函数a(){返回10}
a()的ajax调用承诺。然后(b)
a
返回承诺。所以它是
a()。然后(b)
而不是
$。当(a())。然后(b)
时,我得到了这个错误:
uncaughttypeerror:无法读取未定义的
的属性“then”。忘了提及,我正在使用淘汰(durandal)您忘记了返回延迟的。非常感谢!您为我节省了很多时间,并帮助我更好地理解了这个主题:)
a
返回一个承诺。所以它是
a()。然后(b)
而不是
$。当(a())。然后(b)
时,我得到了这个错误:
uncaughttypeerror:无法读取未定义的
的属性“then”。忘了提及,我正在使用淘汰(durandal)您忘记了返回延迟的。非常感谢!你为我节省了很多时间,帮助我更好地理解了这个话题:)