Skip to content

Commit

Permalink
Переносит статью «Promise.then» (#138)
Browse files Browse the repository at this point in the history
* перенести статью «Promise.then»

* Update nlopin.md

Co-authored-by: Vadim Makeev <pepelsbey@gmail.com>
  • Loading branch information
nlopin and Vadim Makeev authored Mar 19, 2021
1 parent 8f346a5 commit 7a00d31
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
67 changes: 67 additions & 0 deletions js/doka/promise-then/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
title: "Promise. Метод then"
name: promise-then
author: nlopin
summary:
- промис
---

Эта статья связана с понятием [Promise](/js/long/promise)

## Кратко

Метод `then` используют, чтобы выполнить код после изменения состояния промиса.

Метод принимает два аргумента:

- `onFulfill` — функция-колбэк, которая будет вызвана при переходе промиса в состояние «успех» `fulfilled`. Функция имеет один параметр, в который передаётся результат выполнения операции
- `onReject` — функция-колбэк, которая будет вызвана при переходе промиса в состояние «ошибка» `rejected`. Функция имеет один параметр, в который передаётся информация об ошибке

Всегда возвращает новый промис.

## Как пишется

```js
// getPasswords() — асинхронная функция, которая возвращает промис
getPasswords().then(
function (result) {
// что-то делаем с результатом операции
console.log("Все пароли:" + result)
},
function (err) {
// обрабатываем ошибку
console.error(err.message)
}
)
```

## Как понять

Обработка асинхронных операций через промис и `then` очень похожа на работу с колбэками.

Так как `then` всегда возвращает новый промис, то его удобно использовать для построения последовательностей асинхронных операций:

```js
// запросим через API список домов из Игры престолов. Метод `fetch` возвращает промис
fetch('https://www.anapioficeandfire.com/api/houses')
.then(function(response) {
// выполнится, когда от API придет ответ

// запустим асинхронную операцию парсинга JSON из ответа сервера
return response.json() // вернем из обработчика промис, к которому добавим then
})
.then(function(houses) {
// выполнится, когда JSON распарсится

return fetch(houses[0].overlord) // запросим данные о сюзерене этого дома
})
.then(funciton (response) {
// выполнится, когда от API придет ответ
return response.json()
})
.then(function(overlord) {
console.log(overlord.name)
})
```

В коде выше, каждый вызов `then` привязан к результату предыдущей операции. Такой код читается почти как синхронный.
16 changes: 16 additions & 0 deletions js/doka/promise-then/practice/nlopin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
tags:
- practice
permalink: false
---

🛠 `then` в индустрии используется только для обработки успешного завершения операции, в варианте с одним аргументом:

```js
getPasswords().then(function (result) {
// что-то делаем с результатом операции
console.log("Все пароли:" + result)
})
```

Для обработки ошибок используют метод [`catch`](/js/doka/promise-catch).

0 comments on commit 7a00d31

Please sign in to comment.