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.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 已经返回一个 promise ,因此没有理由创建另一个 promise :

;(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);

关于javascript - 如何使用 jQuery 的 Promise 使函数不嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15866761/

相关文章:

javascript - 将变量从 Promise 转移到 Promise

javascript - 验证 xml-crypto Node 模块生成的 xml 签名时出现问题

javascript - Jquery addClass——新类的函数

javascript - 使用 Javascript 缓慢过渡到悬停状态

javascript - 如何强制 jQuery .load() 方法使用 POST

Promise 的 Javascript 竞态条件

javascript - Angular promise : Best Practices and Pros/Cons of Different Techniques

javascript - 如何根据 Angular 的路线给 div 一个类?

javascript - Node.js post请求本地文件

javascript - 在 Rails 中,我发送一个 var 来查看,但在 js 文件中为 nil