Проблема здесь:
async: false
С одной стороны, это устарело (или, по крайней мере, быстро устарело?) И вряд ли будет поддерживаться в последних или будущих обновлениях браузера. Во-первых, это всегда было плохой практикой, и ваш код противоречит принципам JavaScript. Не используйте его.
Но ближе к точке , он явно указывает вашему браузеру, чтобы эта асинхронная операция была блокирующим вызовом . Это означает, что браузер не может обновлять пользовательский интерфейс до завершения операции. Изменение класса элемента DOM является обновлением пользовательского интерфейса. Сам базовый DOM обновляется, но браузер не может отобразить это изменение на экране, пока все операции блокировки не будут завершены.
Сделайте асинхронные операции асинхронными. Удалить async: false
. Это позволит браузеру создавать обновления пользовательского интерфейса, которые вы хотите.
Если есть какая-то другая причина, по которой вы думаете, , вам нужно , чтобы использовать async: false
, то это реальная проблема, которую вам нужно решить. В настоящее время ваш код просто скрывает эту проблему, создавая другую проблему.