为什么jquery“承诺”不能在这个片段中工作?

时间:2017-10-03 20:41:46

标签: javascript jquery promise

var d1 = $.Deferred();
var variable = false;
$.when(function(){
  console.log("This should be printed(consoled) first!");
  if(variable == false){
    variable = true;
    d1.resolve();
  }else{
    d1.resolve();
  }
  return d1.promise();
}).then(function(callback){
  console.log("The variable should be true: -> " + variable);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

“$ .when”里面的函数应该在“then”里面的函数之前执行,它应该把变量的值设置为“true”。但是存在一个问题,并且由于某种原因它不起作用。

1 个答案:

答案 0 :(得分:3)

您放在$.when中的匿名函数永远不会执行,因此永远不会返回承诺。

如果您实际执行该函数,则返回promise,它可以正常工作

var d1 = $.Deferred();
var variable = false;

$.when((function(){ // using an IIFE
  console.log("This should be printed(consoled) first!");
  if(variable == false){
    variable = true;
    d1.resolve();
  }else{
    d1.resolve();
  }
  return d1.promise();
})()).then(function(callback){
  console.log("The variable should be true: -> " + variable);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>