为什么此 promise 调用后的代码没有 运行?

Why doesn't the code after this promise invocation run?

当我在将函数交给 运行 完成后尝试添加任何代码时,它永远不会 运行s。请参阅此示例。

(function() {
   var url = //some url that I know works

   var promise = $.get(url);
   $.when(promise).then(function(xml) {
      alert("Promise resolved.");
   })();

   //This code doesn't run!
   alert("Code after promise.");
})();

我还以为在$.when之后马上执行到下一行了。这不是使用 promises 的全部意义吗? "Promise resolved" 警报正常,但 "Code after promise" 从未出现。我错过了什么?

您在此块之后有一个不必要的 ()

$.when(promise).then(function(xml) {
    alert("Promise resolved.");
  })();

改为:

$.when(promise).then(function(xml) {
    alert("Promise resolved.");
  });

其中一条评论指出您的代码开头需要一个 $。这不是真的。您只是在这里创建一个闭包,这是完全可以接受的语法。但是,我会建议在您的脚本前加上 ; 前缀,这样如果它包含在任何其他关闭之后,它可以确保它们被关闭。在 JavaScript.

中使用闭包时,这只是一般的好习惯
(function(){
   var url = //some url that I know works

   var promise = $.get(url);
   //********************************
   $.when(promise).then(function(xml){
   alert("Promise resolved.");
   }); // take this () off
   //********************************
   //This code will run first
   alert("Code after promise.");
 })();