为什么不't运行此promise调用之后的代码

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

本文关键字:调用 promise 之后 代码 运行 为什么不      更新时间:2023-09-26

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

(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之后的下一行。这不是承诺的全部意义吗?"承诺已解决"警报会正常运行,但"承诺后的代码"从未出现。我错过了什么?

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

$.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.");
 })();