Właśnie zacząłem używać węzła i jedną z rzeczy, które szybko zauważyłem, jest szybkość wywołań zwrotnych do głupiego poziomu wcięcia:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
Oficjalny przewodnik styl mówi umieścić każdy zwrotnego w osobnej funkcji, ale to wydaje się zbyt restrykcyjne w sprawie stosowania zamknięć, a co pojedynczy obiekt zadeklarowane w poziomie górnym dostępnych kilka warstw w dół, a obiekt ma być przekazany przez cały pośrednie wywołania zwrotne.
Czy można w tym celu skorzystać z zakresu funkcji? Umieścić wszystkie funkcje zwrotne, które potrzebują dostępu do obiektu globalnego, w funkcji, która deklaruje ten obiekt, więc przechodzi do zamknięcia?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
i tak dalej przez kilka kolejnych warstw ...
A może istnieją ramy itp., Które pomagają zmniejszyć poziomy wcięć bez deklarowania nazwanej funkcji dla każdego pojedynczego wywołania zwrotnego? Jak sobie radzisz z piramidą oddzwaniania?