Анимация работает асинхронно
т.е. запускается setTimeOut или AnimationFrame через определенные промежутки времени
т.е. просто задаются задачи которые выполнятся в будущем (будут менять css свойства)
при вызове функции animate можно передать параметром функцию котороя выполнится по завершении анимации
http://api.jquery.com/animate/ 4й параметр функции
имхо так делать анимацию нельзя.