为什么这个promise调用之后的代码没有运行?

时间:2015-11-03 01:02:07

标签: javascript jquery-deferred

当我尝试在将函数交给承诺运行完成后添加任何代码时,它永远不会运行。见这个例子。

row_number

我认为执行立即转到(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."); })(); 之后的下一行。这不是使用承诺的全部意义吗? “承诺已解决”警报没有问题,但“承诺后的守则”从未出现过。我错过了什么?

2 个答案:

答案 0 :(得分:2)

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

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

将其更改为:

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

其中一条评论表明您需要在代码的开头加$。这不是真的。你只是在这里创建一个闭包,这是完全可以接受的语法。但是,我建议为脚本添加;前缀,这样如果它包含在任何其他闭包之后,它会确保它们被关闭。在JavaScript中使用闭包时,这通常是一种很好的做法。

答案 1 :(得分:0)

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