Jquery 延迟对象中的回调函数

Jquery 延迟对象中的回调函数,jquery,deferred,Jquery,Deferred,我试图学习一些javascript课程,其中有一个延迟的实现。 这是代码的核心 getData = function (options) { return $.Deferred(function (def) { var results = options.results; getFunction({ success: function (smt) {

我试图学习一些javascript课程,其中有一个延迟的实现。 这是代码的核心

getData = function (options) {
  return $.Deferred(function (def) {

    var results = options.results;                    

    getFunction({
      success: function (smt) {                                
        results("test");
        def.resolve(results);
        debugger;
      },
      error: function (response) {                                    
        def.reject();
      }
    }); 

  }).promise();
},
现在的问题是。。当我从外部调用此函数时,如:

$.when(somthing.getData(options)).
   done(alert(options.results));

debugger;
调用时,首先到达$.when外部的调试器,然后触摸延迟对象中回调成功函数内部的调试器


我不明白。。承诺不应该只有在达到定义解析(结果)时才能实现吗

除了最后一行之外,其他都是正确的:

$.when(somthing.getData(options)).done(alert(options.results));
debugger;
您可以在此处立即调用
警报
(和
调试器
)。您需要将回调传递给
done
,如下所示:

$.when(somthing.getData(options))
.done(function(){
    alert(options.results);
    debugger;
});

谢谢你,怪人。。那很有魅力。。我能问你为什么吗?。。我以为里面的函数已经是回调函数了。。。为什么我必须定义一个这样的函数来调用我的函数?…
.done
接受一个函数。传递给
.done
的不是函数,而是调用
警报()
的结果(注意顺序:首先调用警报,然后将其结果传递给
.done
),但未定义(这是警报返回的结果)。这就像做
.done(“测试”)
。这是什么意思?JavaScript应该如何处理字符串?您希望将一个函数传递给
.done
,这样JavaScript就会知道:“哦,我收到了一个函数,当
完成时,我可以调用它一次
”。