Для чего вы используете promise?
 если промис переходит в состояние resolve, обратно его уже не вернуть в изначальное состояние
Да. Вместо этого создают новый промиз и работают с ним.
Промисы используют обычно, когда есть несколько асинхронных операций с неясным исходом.
Я использовал when и then, когда надо было сделать одновременно 2 аякс запроса и работать дальше, только когда оба запроса завершатся.