Отличие методов .done() и .then() при работе с асинхронными запросами заключается в их назначении:
- Метод .done() сообщает о том, что обработка цепочки промисов завершена. 1 Он не создаёт и не возвращает промисы, поэтому любое исключение внутри обработчика отклонения промиса в done() будет выброшено как глобальная необработанная ошибка. 1
- Метод .then() используется, чтобы выполнить код после успешного выполнения асинхронной операции. 5 Он принимает в качестве аргумента две функции-колбэка: если промис в состоянии fulfilled, выполнится первая функция, если в состоянии rejected — вторая. 5
Таким образом, метод .done() применяется для обработки неперехваченных исключений, а метод .then() — для обработки результатов выполнения асинхронной операции (успешного или с ошибкой) 125.