Промис выполнен. Реакция меняет метку с Loading на Calculating. Идёт долгий синхронный расчёт. Метка становится Done. Проще всего решить, что пользователь увидел все три метки по порядку, но я сомневаюсь, что средняя вообще появилась на экране.
Присваивания идут по порядку. А вот отрисовка живёт по своим правилам. Реакции промисов выполняются как задания, а контрольные точки микрозадач в цикле событий HTML не совпадают с возможностями отрисовки. Если поменять метку внутри этой реакции, это ещё не гарантирует, что Calculating окажется на экране до начала расчёта. Чтобы показывать полезный прогресс, работу нужно перестроить так, чтобы у отрисовки был шанс, а выполнение промиса не считать подтверждением отрисовки.
Вторая сцена, тот же обработчик. Запрос A в пути. Пользователь отменяет A и запускает B. Завершение A приходит, когда текущим уже стал B. Экран должен сохранить статус B, и A не должен записать поверх него Done. Если пользователь отменил A и ничего взамен не запустил, экран должен остаться в понятном состоянии.
Так что прежде чем объяснять этот обработчик, нужны две вещи. Возможность отрисовки и правило, какие результаты принимать.