繁体   English   中英

为什么这个承诺调用之后的代码不运行?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM