我刚刚开始使用节点,并且我很快注意到的一件事是回调能够以多快的速度建立到一个愚蠢的缩进级别:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
该负责人风格指南说,把每个回调在一个单独的功能,但似乎对使用封闭的过于严格,并使单个对象在顶级声明可用几层下来,对象必须通过所有的传递中间回调。
可以使用函数范围来帮助吗?将所有需要访问全局对象的回调函数放在声明该对象的函数中,以便将其放入闭包中?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
等等更多的层...
还是有框架等可以帮助减少缩进级别而无需为每个回调都声明命名函数?您如何处理回调金字塔?