Jquery 延迟对象中的回调函数
我试图学习一些javascript课程,其中有一个延迟的实现。 这是代码的核心Jquery 延迟对象中的回调函数,jquery,deferred,Jquery,Deferred,我试图学习一些javascript课程,其中有一个延迟的实现。 这是代码的核心 getData = function (options) { return $.Deferred(function (def) { var results = options.results; getFunction({ success: function (smt) {
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就会知道:“哦,我收到了一个函数,当完成时,我可以调用它一次”。