Я щойно почав використовувати вузол, і одне, що я швидко помітив, це те, як швидко можуть бути зворотні виклики до глупого рівня відступу:
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);
}
і так далі для ще декількох шарів ...
Або існують рамки тощо, які допомагають знизити рівні відступи, не оголошуючи названу функцію для кожного зворотного виклику? Як ви маєте справу з пірамідою зворотного дзвінка?