这是正确使用$。在这种情况下推迟?

时间:2012-12-08 21:41:30

标签: javascript jquery jquery-deferred

我有以下代码和模块

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的延迟对象,但不确定这是否正是我在这里做的?

我想知道这种方法是否有任何缺点?

可以更优雅地完成吗?

由于

1 个答案:

答案 0 :(得分:6)

不,这不是$.Deferred的好用,因为$.getJSON已经内置了延迟对象,并且在较新版本的jQuery中增加了对promises等的支持。

您可以使用内置的延迟对象,只返回ajax调用,并直接将done()函数附加到该函数:

var repository = {
    getUserPolicies: function() {
        return $.getJSON("http://localhost:62588/api/Values/getXMLData");
    }
}

repository.getUserPolicies().done(process);

FIDDLE