Прежде всего, слово для мудрых: обратные вызовы считаются плохой практикой.Теперь у нас есть лучшие способы справиться с подобными вещами.В рамках спецификации языка у нас есть Promise
s.Что касается внешних библиотек, у нас также есть Observable
s.До того как он стал частью спецификации, Promise
был построен с использованием обратных вызовов, но предлагал вам более удобочитаемый способ работы с ними, особенно в отношении цепочек обратных вызовов.
Очень конкретнопотому что обычно обратные вызовы используются в коде библиотеки, а не в вашем основном коде, поэтому разработчики библиотеки добавляют таким образом, чтобы вы добавили пользовательские функции в их поведение.Что касается использования обратных вызовов в вашем собственном коде ... в зависимости от текущего состояния вашего приложения и того, кто является вызывающей функцией, вам могут потребоваться другие обратные вызовы.Суть в том, что separation of concerns
является важной концепцией, с которой вам необходимо ознакомиться.
Например,
function showModal(whichModal) {
someLibrary.modal(whichModal).show();
switch (whichModal) {
case 'createUser':
someUserLogic();
break;
case 'createProject':
someProjectLogic();
break;
}
}
function createUser() {
showModal('createUser');
}
function createProject() {
showModal('createProject');
}
против
function showModal(whichModal, postShowCallback) {
someLibrary.modal(whichModal).show();
postShowCallback();
}
function createUser() {
showModal('createUser', someUserLogic);
}
function createProject() {
showModal('createProject', someProjectLogic);
}
Вы можете увидеть, какбыстро первый пример выйдет из-под контроля, и как элегантно второй решит эту проблему