除了Promises之外,还有什么模式可以编排函数调用吗

Is there any pattern to orchestrate function calls besides Promises?

本文关键字:函数调用 模式 什么 之外 Promises 除了      更新时间:2023-09-26

我正试图逃离末日金字塔。想象一下以下函数调用序列:

$.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);
    });
};

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

好吧,您的代码中已经有承诺(或者至少有延迟),所以没有充分的理由寻找不同的编码模式。但是,您可以通过使用强大的then方法链接promise回调而不是嵌套它们(使用done)来压平回调金字塔:

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

这与您的代码完全等效。