Посыпаю голову пеплом! Оказывается, мой пример - рабочий :-)
Просто я писал его на основе своего реального кода, намеренно упрощая, пытаясь показать самую суть. А дело было ночью, и голова уже плохо соображала
В реальном коде у меня была допущена ошибка, .done() был таким:
.done(console.log(t));
В то время, как здесь я запостил его в правильном виде:
.done(function () {console.log(t)});
И, разумеется, console.log(t) выполнялся тут же, не дожидаясь обработки событий.
А такой каскад обработчиков нужен был вот для чего. $.post()-запросов было несколько, и в .success() каждого запроса происходила обработка полученного результата. И уже по факту завершения последнего запроса вызывался окончательный обработчик .done(), который пользовался результатами работы .success() каждого запроса.
.promise() оказался ненужным. Документация (
http://api.jquery.com/jquery.post/) гласит следующее:
As of jQuery 1.5, all of jQuery's Ajax methods return a superset of the XMLHTTPRequest object. This jQuery XHR object, or "jqXHR," returned by $.get() implements the Promise interface, giving it all the properties, methods, and behavior of a Promise (see Deferred object for more information).
Но всё равно большое спасибо за отзыв!