我试图逃离厄运的金字塔。想象一下以下函数调用系列:
$.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);
});
};
问题是我如何重构上面的代码以使其变得可读/可维护?
答案 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
});
完全等同于您的代码。