Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions js/promise-all/practice/zheleznikov.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
🛠 `Promise.all()` удобно использовать, когда нужно дождаться нескольких независимых асинхронных операций и продолжить работу только после того, как все они завершатся успешно.

Например, перед отправкой формы регистрации нужно проверить, свободны ли email и логин, действителен ли промокод.

Если все проверки завершатся успешно, выполнится обработчик `then()`, и кнопка отправки формы станет доступной для нажатия. Если хотя бы одна из проверок завершится с ошибкой, то промис, возвращённый `Promise.all()`, будет отклонён — сработает обработчик `catch()`: в этом случае мы заблокируем кнопку, а пользователь увидит сообщение об ошибке валидации.


```js
Promise.all([
checkEmail(email),
checkLogin(login),
checkPromoCode(promoCode)
])
.then(() => {
enableSubmitButton()
})
.catch((error) => {
disableSubmitButton()
showValidationError(error)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

предлагаю также добавить функцию для блокировки кнопки отправки (disableSubmitButton()) в блоке catch. Это необходимо для такого кейса:
Пользователь вводит корректные данные формы, кнопка отправки становится доступной (enabled). Пользователь меняет значение одного из полей формы на невалидное значение.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Согласен, нельзя оставлять состояние кнопки без внимания. Добавил вызов функции, чтобы блокировать кнопку. Мне кажется теперь нормально. Да ведь? :)
Но мне теперь не очень нравится, что в части кода есть комментарии, например, вот здесь:
checkEmail(email), // Проверка, что email свободен

А в блоках then и catch комментариев к вызову функций нет. Мне кажется будет лучше, если будет одинаково. Я бы хотел убрать комментарии примера. Будет выглядеть так:

Promise.all([
  checkEmail(email),
  checkLogin(login), 
  checkPromoCode(promoCode)
])
  .then(() => {
    enableSubmitButton()
  })
  .catch((error) => {
    disableSubmitButton()
    showValidationError(error)
  })

Как думаешь, убрать комментарии из кода?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Коменты в коде на усмотрение автора.
А вообще, лучше описать всё обычным текстом над примером.

})
Comment thread
vitya-ne marked this conversation as resolved.
```
Loading