Я только начал использовать узел, и одну вещь, которую я быстро заметил, это то, как быстро обратные вызовы могут вырасти до глупого уровня отступа:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
Официальный стиль говорит поместить каждый обратный вызов в отдельной функции, но кажется , что чрезмерно ограничительным на использовании замыканий, и делает один объект объявлен на уровне верхнего доступны несколько уровней вниз, как объект должен быть передан через все промежуточные обратные вызовы.
Можно ли использовать область действия, чтобы помочь здесь? Поместить все функции обратного вызова, которым нужен доступ к объекту global-ish, в функцию, которая объявляет этот объект, чтобы он перешел в замыкание?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
и так далее для еще нескольких слоев ...
Или существуют платформы и т. Д., Чтобы помочь уменьшить уровни отступов, не объявляя именованную функцию для каждого обратного вызова? Как вы справляетесь с пирамидой обратного вызова?