Ответ
Promise (Обещание) — это объект в JavaScript, представляющий результат (успешный или неудачный) асинхронной операции, которая завершится в будущем. Он является фундаментальной частью работы с асинхронностью в Node.js.
Состояния Promise:
pending(ожидание): Начальное состояние, операция еще не завершена.fulfilled(выполнено): Операция завершилась успешно. Promise переходит в это состояние при вызовеresolve(value).rejected(отклонено): Операция завершилась с ошибкой. Promise переходит в это состояние при вызовеreject(error).
Пример создания и использования:
const readFileAsync = (filename) => {
return new Promise((resolve, reject) => {
fs.readFile(filename, 'utf8', (err, data) => {
if (err) {
reject(new Error(`Failed to read file: ${err.message}`));
} else {
resolve(data);
}
});
});
};
// Использование с цепочкой .then() и .catch()
readFileAsync('config.json')
.then(data => {
console.log('File content:', data);
return JSON.parse(data);
})
.then(config => console.log('DB Host:', config.dbHost))
.catch(error => console.error('Error:', error.message));
Ключевые преимущества для Node.js:
- Избегание "Callback Hell": Позволяет структурировать асинхронный код более линейно и читаемо.
- Цепочки вызовов: Методы
.then()всегда возвращают новый Promise, что позволяет строить последовательности асинхронных операций. - Централизованная обработка ошибок: Все ошибки в цепочке можно перехватить одним блоком
.catch()в конце. - Интеграция с async/await: Promise — основа для синтаксиса
async/await, который делает асинхронный код похожим на синхронный.
Статические методы для работы с коллекциями Promise:
Promise.all([p1, p2]): Ждет выполнения всех промисов. Если один отклоняется — вся операция отклоняется.Promise.allSettled([p1, p2]): Ждет завершения всех промисов (успех или ошибка) и возвращает массив с результатами каждого.Promise.race([p1, p2]): Возвращает результат первого завершившегося промиса (fulfilled или rejected).
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶