update promises
This commit is contained in:
85
docs/javascript/08-promises/02-promises.md
Normal file
85
docs/javascript/08-promises/02-promises.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Promises
|
||||
Источник *Deepseek*
|
||||
|
||||
Использование Promises (обещаний) в JavaScript — это более современный и удобный способ работы с асинхронными операциями по сравнению с callback-функциями. Promises позволяют избежать "callback hell" и делают код более читаемым и структурированным.
|
||||
|
||||
Вот пример асинхронного программирования с использованием Promises:
|
||||
```js
|
||||
// Пример асинхронной функции, которая возвращает Promise
|
||||
function fetchData() {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Имитируем задержку с помощью setTimeout
|
||||
setTimeout(() => {
|
||||
const success = true; // Имитируем успешное выполнение или ошибку
|
||||
if (success) {
|
||||
const data = { name: "Alice", age: 25 };
|
||||
resolve(data); // Успешное выполнение
|
||||
} else {
|
||||
reject("Ошибка: Данные не получены"); // Ошибка
|
||||
}
|
||||
}, 2000); // Задержка 2 секунды
|
||||
});
|
||||
}
|
||||
|
||||
// Использование Promise
|
||||
fetchData()
|
||||
.then((data) => {
|
||||
console.log("Данные получены:", data);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
})
|
||||
.finally(() => {
|
||||
console.log("Запрос завершен.");
|
||||
});
|
||||
|
||||
console.log("Ожидание данных...");
|
||||
```
|
||||
Объяснение:
|
||||
1. **fetchData** — это функция, которая возвращает `Promise`. Внутри `Promise` выполняется асинхронная операция (в данном случае, с задержкой в 2 секунды).
|
||||
2. **resolve** — вызывается, если операция завершилась успешно. В этом случае `Promise` переходит в состояние "fulfilled" (выполнено), и данные передаются в метод .then().
|
||||
3. **reject** — вызывается, если произошла ошибка. В этом случае `Promise` переходит в состояние "rejected" (отклонено), и ошибка передается в метод .catch().
|
||||
4. **.then()** — обрабатывает успешный результат.
|
||||
5. **.catch()** — обрабатывает ошибки.
|
||||
6. **.finally()** — выполняется в любом случае, независимо от того, завершился `Promise` успешно или с ошибкой.
|
||||
|
||||
#### Вывод в консоль:
|
||||
```
|
||||
Ожидание данных...
|
||||
Данные получены: { name: "Alice", age: 25 }
|
||||
Запрос завершен.
|
||||
```
|
||||
#### Если произойдет ошибка:
|
||||
Если переменная `success` будет равна `false`, то вывод будет таким:
|
||||
```
|
||||
Ожидание данных...
|
||||
Ошибка: Данные не получены
|
||||
Запрос завершен.
|
||||
```
|
||||
#### Преимущества Promises:
|
||||
- Более читаемый и структурированный код.
|
||||
- Легко комбинировать несколько асинхронных операций с помощью `.then()`.
|
||||
- Удобная обработка ошибок через `.catch()`.
|
||||
|
||||
#### Пример с цепочкой Promises:
|
||||
```js
|
||||
fetchData()
|
||||
.then((data) => {
|
||||
console.log("Данные получены:", data);
|
||||
return data.age; // Возвращаем только возраст
|
||||
})
|
||||
.then((age) => {
|
||||
console.log("Возраст пользователя:", age);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
```
|
||||
Этот пример показывает, как можно последовательно обрабатывать данные с помощью цепочки `.then()`.
|
||||
|
||||
💥 **Thenable**
|
||||
> Если быть более точными, обработчик может возвращать не именно промис, а любой объект, содержащий метод .then, такие объекты называют «thenable», и этот объект будет обработан как промис.
|
||||
Reference in New Issue
Block a user