我正在尝试关注一些有延迟实现的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调用之外首先到达调试器,然后触摸Deferred对象内的回调SUCCESS函数内的那个...
我不明白..不应该只是在达到def.resolve(结果)时才做出的承诺?...
答案 0 :(得分:1)
除最后一行外,一切都正确:
$.when(somthing.getData(options)).done(alert(options.results));
debugger;
您可以立即致电alert
(和debugger
)。你想要的是将回调传递给done
,如下所示:
$.when(somthing.getData(options))
.done(function(){
alert(options.results);
debugger;
});