Javascript 仅在Jquery承诺完成后执行语句?

Javascript 仅在Jquery承诺完成后执行语句?,javascript,jquery,promise,jquery-deferred,Javascript,Jquery,Promise,Jquery Deferred,我试图执行一个需要按顺序执行语句的函数。 我使用Jquery延迟承诺,但承诺之后的语句最初会执行。如何按顺序执行所有语句? 我更新你的密码 这是testFn函数的代码 return a().then(b).then(function(){console.log("this statement will execute after a & b completed");return "last"});; 我首先调用一个函数,最后调用b函数,然后将消息放入控制台并返回一个字符串。更新的f

我试图执行一个需要按顺序执行语句的函数。 我使用Jquery延迟承诺,但承诺之后的语句最初会执行。如何按顺序执行所有语句?

我更新你的密码

这是testFn函数的代码

return a().then(b).then(function(){console.log("this statement will execute after a & b completed");return "last"});;
我首先调用一个函数,最后调用b函数,然后将消息放入控制台并返回一个字符串。

更新的fiddle:

与马可·莫雷利·莫雷蒂的答案不同,这个答案的“a”和“b”是平行的,但要等待它们

function testFn(){
  $.when(a(), b()).then(function(){
    console.log("this statement will execute after a & b completed");
  });
}

但是我不能像你建议的那样调用初始函数。testFn().then(函数(lastResult){console.log(lastResult);});它必须作为result=testFn()调用;您不能直接从testFn获得结果。在任何情况下,它都是一个承诺,因为承诺是异步的,所以你的意思是没有办法实现同步执行行为?或者强制承诺完成执行下一个语句?不,你不能。但我想问你一个问题:如果你想要同步执行,为什么要使用承诺?Bcz这两个函数中几乎没有ajax请求。但最终结果尚未定义:(Bcz)该声明在这些承诺兑现之前执行completed@RebornxJavaScript是同步的,如果您查看代码,您分配
result
的部分没有处理
testFn()的异步行为
。如果您的所有代码都包装在一个函数中,只需使用两个答案所暗示的承诺,然后让包装函数返回承诺。代码有一个常见的误解,即使用承诺可以使异步代码同步。如果您停下来想一想,这很明显是Rebornx,你已经理解了
p.then(a)。then(b)
,所以理解
p.then(a)。then(b)。then(doSomethingElse)
@JaromandaX现在我明白了。
function testFn(){
  $.when(a(), b()).then(function(){
    console.log("this statement will execute after a & b completed");
  });
}