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