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)您忘记了返回延迟的。非常感谢!你为我节省了很多时间,帮助我更好地理解了这个话题:)