为什么我的deffered()函数不起作用,除非我引用另一个变量?

时间:2016-03-01 13:51:05

标签: javascript jquery

var myFunc = function() {
  var dfd = $.Deferred();
  //Do some code...
  //That might have ajax calls
  dfd.resolve(); // Resovle deferred
  return dfd.promise(); //Return the promise
}

这会产生错误.done不是函数

myFunc.done(function(){
  console.log("ALL DONE...");
});

但是,如果我第一次这样做:

var ref = myFunc();

ref.done(function(){
  console.log("ALL DONE...");
});

现在一切正常,我不明白为什么需要两个函数之间的引用?

2 个答案:

答案 0 :(得分:3)

这是试图在done对象本身上调用myFunc函数:

myFunc.done(function(){
  console.log("ALL DONE...");
});

你需要实际调用函数来掌握这个承诺:

myFunc().done(function(){
  console.log("ALL DONE...");
});

将其分配给变量时已完成的操作:

var ref = myFunc();

这一行是:

var ref = myFunc;

你会得到同样的错误。

答案 1 :(得分:2)

myFunc().done(function(){
  console.log("ALL DONE...");
});

您必须调用myFunc