如何使用jQuery的promise,以便函数不嵌套

时间:2013-04-07 19:24:02

标签: javascript jquery promise

我想我添加了一层复杂性。这就是我所拥有的:

;(function($, window, undefined) {
    function download() {
        var local = {};
        local.data = {};
        local.data.method = 'getMyData';
        local.dataType = 'json';
        local.Promise = $.ajax('myComponent.cfc', local);
        local.Promise.done(PromiseDone);
        local.Promise.fail(PromiseFail);
    }

    function PromiseDone(result) {};
    function PromiseFail(myEvent) {};
})(jQuery, window);

我想做的是这样的事情:

;(function($, window, undefined) {
    var Variables = {};
    Variables.Promise = $.Deferred();

    function download() {
        var local = {};
        local.data = {};
        local.data.method = 'getMyData';
        local.dataType = 'json';
        Variables.Promise = $.ajax('myComponent.cfc', local);
    }

    Variables.Promise.done(function(result) {
    });
    Variables.Promise.fail(function(myEvent) {
    });
})(jQuery, window);

我的目标是展平JavaScript,以便我的函数不会嵌套。

问:我的想法是否有效,或者deferred是否需要resolve才能被视为done

1 个答案:

答案 0 :(得分:2)

你真的添加了不必要的复杂性。 $.ajax已经返回一个承诺,因此没有理由再创建另一个承诺:

;(function($, window, undefined) {
    function download() {
        return $.ajax({
           data    : {method:'getMyData'},
           dataType: 'json'
        });
     }

    var ajaxCall = download();

    ajaxCall.done(function(result) {
          // do something with result
    });

    ajaxCall.fail(function() {
         // failed
    });
})(jQuery, window);
相关问题