Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jQuery';s承诺,以便函数不嵌套_Javascript_Jquery_Promise - Fatal编程技术网

Javascript 如何使用jQuery';s承诺,以便函数不嵌套

Javascript 如何使用jQuery';s承诺,以便函数不嵌套,javascript,jquery,promise,Javascript,Jquery,Promise,我想我增加了一层复杂性。以下是我得到的: ;(function($, window, undefined) { function download() { var local = {}; local.data = {}; local.data.method = 'getMyData'; local.dataType = 'json'; local.Promise = $.ajax('myComponent.c

我想我增加了一层复杂性。以下是我得到的:

;(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,这样我的函数就不会嵌套


问:我的想法行得通吗?

你真的增加了不必要的复杂性,还是一个
延迟的
需要
解决
<代码>$。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);

天啊。返回$.ajax()。太棒了@菲利普-答案有点变了!