Tôi mới bắt đầu sử dụng nút và một điều tôi đã nhanh chóng nhận thấy là cách gọi lại nhanh chóng có thể tạo ra mức độ thụt lề ngớ ngẩn:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
Các hướng dẫn phong cách chính thức nói với đưa từng gọi lại trong một chức năng riêng biệt, nhưng điều đó dường như quá hạn chế về việc sử dụng đóng cửa, và làm cho một đối tượng duy nhất tuyên bố ở cấp cao nhất có sẵn một vài lớp xuống, như đối tượng đã được chuyển qua tất cả các cuộc gọi lại trung gian.
Có thể sử dụng phạm vi chức năng để giúp đỡ ở đây? Đặt tất cả các hàm gọi lại cần truy cập vào một đối tượng toàn cầu bên trong một hàm khai báo đối tượng đó, để nó đi vào một bao đóng?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
và cứ thế cho một vài lớp nữa ...
Hoặc có các khung vv để giúp giảm mức độ thụt mà không cần khai báo một hàm được đặt tên cho mỗi lần gọi lại? Làm thế nào để bạn đối phó với kim tự tháp gọi lại?