Saya baru saja mulai menggunakan node, dan satu hal yang saya perhatikan dengan cepat adalah seberapa cepat callback dapat membangun ke tingkat indentasi yang konyol:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
The panduan gaya resmi mengatakan untuk menempatkan setiap panggilan balik dalam fungsi yang terpisah, tapi itu tampaknya terlalu ketat pada penggunaan penutupan, dan membuat satu objek dideklarasikan di tingkat atas tersedia beberapa lapisan bawah, sebagai objek tersebut harus melewati semua panggilan balik menengah.
Apakah boleh menggunakan lingkup fungsi untuk membantu di sini? Letakkan semua fungsi panggilan balik yang membutuhkan akses ke objek global di dalam fungsi yang menyatakan objek itu, jadi ia akan ditutup?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
dan seterusnya untuk beberapa lapisan lagi ...
Atau apakah ada kerangka kerja dll untuk membantu mengurangi tingkat indentasi tanpa mendeklarasikan fungsi yang disebutkan untuk setiap panggilan balik tunggal? Bagaimana Anda menangani piramida callback?