0

我有以下代码和一个模块

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

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

可以做得更优雅吗?

谢谢

4

1 回答 1

6

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

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

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

repository.getUserPolicies().done(process);

小提琴

于 2012-12-08T21:57:37.273 回答