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

dav*_*avy 0 javascript jquery jquery-deferred

我有以下代码和一个模块

var def = $.Deferred();

$.getJSON("http://localhost:62588/api/Values/getXMLData")
 .done(function(json){
      def.resolve($.parseJSON(json));
});

return def;
Run Code Online (Sandbox Code Playgroud)

然后,我必须从另一个模块调用它,以便在调用处理返回的数据之前完成.

repository.getUserPolicies().done(function (userPolicies) {
    process(userPolicies);
});
Run Code Online (Sandbox Code Playgroud)

这很好用但我还不太明白延迟对象是如何工作的.

我已经读过你可以使用getJSON的延迟对象,但不确定这是否正是我在这里做的?

我想知道这种方法有什么缺点吗?

可以更优雅地完成吗?

谢谢

ade*_*neo 6

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

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

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

repository.getUserPolicies().done(process);
Run Code Online (Sandbox Code Playgroud)

小提琴