2

我正在尝试学习一些 javascript 课程,其中有 Deferred 的实现。这是代码的核心

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 调用之外的调试器,然后触摸 Deferred 对象内的回调 SUCCESS 函数内部的那个...

我不明白.. 不应该只在达到 def.resolve(results) 时才做出承诺?...

4

1 回答 1

1

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

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

您在这里立即调用alert( 和debugger)。你想要的是done像这样传递一个回调:

$.when(somthing.getData(options))
.done(function(){
    alert(options.results);
    debugger;
});
于 2013-03-05T09:22:24.533 回答