Ответ 1
Изначально асинхронные функции jQuery не возвращали promises, вам приходилось использовать обратный вызов.
Затем они добавили отложенную (обещающую) систему, но сохранили обратные вызовы для совместимости (и потому, что не всем нравится отсрочка).
От документация по отложенному объекту:
В JavaScript обычно вызывается функция, которая при необходимости принимает обратные вызовы, вызываемые внутри этой функции. Например, в до jQuery 1.5, асинхронные процессы, такие как jQuery.ajax() принимает обратные вызовы, которые будут вызываться некоторое время в рядом с будущим после успеха, ошибки и завершения запроса ajax.
jQuery.Deferred() вводит несколько улучшений способа обратного вызова управляются и вызывают. В частности, jQuery.Deferred() предоставляет гибкие способы предоставления множественных обратных вызовов, и эти обратные вызовы могут вызывается независимо от того, была ли исходная отправка обратного вызова уже произошло. jQuery Отложенная основана на CommonJS Promises/A дизайн.