是否有任何模式来协调除Promises之外的函数调用?

时间:2014-10-08 13:51:28

标签: javascript jquery design-patterns

我试图逃离厄运的金字塔。想象一下以下函数调用系列:

$.wait(1000).done(function() {
    //Do something

    $.wait(5000).done(function(){
        //Do something else

        $.wait(2200).done(function(){
            //Do something else
        });
    });
});

$ .wait函数定义为:

$.wait = function (duration) {
    return $.Deferred(function (dfd) {
        setTimeout(dfd.resolve, duration);
    });
};

问题是我如何重构上面的代码以使其变得可读/可维护?

1 个答案:

答案 0 :(得分:1)

嗯,你已经在你的代码中有承诺(或者至少是deferreds),所以没有充分的理由去寻找不同的编码模式。但是,您可以{em>链接使用allmighty flatten your callback pyramid进行承诺回调,而不是将它们嵌套(使用done){/ 3}}:

$.wait(1000).then(function() {
//           ^^^^
    //Do something
    return $.wait(5000);
//  ^^^^^^
}).then(function() {
// ^^^^
    //Do something else
    return $.wait(2000);
//  ^^^^^^
}).then(function() {
// ^^^^
    //Do something else
});

完全等同于您的代码。