Вопрос проверяет понимание жизненного цикла Promise и того, как JavaScript обрабатывает незавершённые асинхронные операции.
Promise в JavaScript представляет собой асинхронную операцию, которая может находиться в одном из трёх состояний: pending (ожидание), fulfilled (выполнено успешно) или rejected (отклонено). Если ни resolve, ни reject не были вызваны, Promise навсегда остаётся в состоянии pending. Это означает, что цепочка then/catch или await, привязанные к нему, никогда не сработают.
Незавершённый Promise не вызывает ошибку напрямую, но может привести к следующим проблемам:
const unresolvedPromise = new Promise((resolve, reject) => {
// Ни resolve, ни reject не вызываются
console.log('Promise создан, но не завершён');
});
unresolvedPromise.then(() => {
console.log('Этот код никогда не выполнится');
});
// Через 5 секунд Promise всё ещё в состоянии pending
setTimeout(() => console.log(unresolvedPromise), 5000);
// Вывод: Promise { <pending> }Всегда гарантируйте, что в каждом пути выполнения функции-исполнителя Promise вызывается resolve или reject. Используйте обработчики ошибок и таймауты для предотвращения зависания. В современных средах (например, Node.js) можно использовать флаги вроде --unhandled-rejections=strict для отслеживания незавершённых Promise.
Вывод: Незавершённый Promise — это источник скрытых багов и утечек памяти. Всегда завершайте Promise явно, чтобы обеспечить предсказуемое выполнение асинхронного кода.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию