我有以下代码和模块
var def = $.Deferred();
$.getJSON("http://localhost:62588/api/Values/getXMLData")
.done(function(json){
def.resolve($.parseJSON(json));
});
return def;
然后我必须从另一个模块调用它,以便在调用处理返回的数据之前完成它。
repository.getUserPolicies().done(function (userPolicies) {
process(userPolicies);
});
这很有效,但我还不太清楚延迟对象是如何工作的。
我已经读过你可以使用getJSON的延迟对象,但不确定这是否正是我在这里做的?
我想知道这种方法是否有任何缺点?
可以更优雅地完成吗?
由于
答案 0 :(得分:6)
不,这不是$.Deferred
的好用,因为$.getJSON
已经内置了延迟对象,并且在较新版本的jQuery中增加了对promises等的支持。
您可以使用内置的延迟对象,只返回ajax调用,并直接将done()
函数附加到该函数:
var repository = {
getUserPolicies: function() {
return $.getJSON("http://localhost:62588/api/Values/getXMLData");
}
}
repository.getUserPolicies().done(process);