Skip to content

Добавляет "На практике" для Promise.all()#5989

Open
zheleznikov wants to merge 4 commits into
doka-guide:mainfrom
zheleznikov:js-promise-all-advice
Open

Добавляет "На практике" для Promise.all()#5989
zheleznikov wants to merge 4 commits into
doka-guide:mainfrom
zheleznikov:js-promise-all-advice

Conversation

@zheleznikov
Copy link
Copy Markdown
Contributor

Добавил еще один практический пример для Promise.all()

@zheleznikov zheleznikov changed the title Добавляет "На практике" для Promise.all Добавляет "На практике" для Promise.all() Apr 24, 2026
@github-actions github-actions Bot added the js Контент по JavaScript label Apr 24, 2026
Comment thread js/promise-all/practice/zheleznikov.md Outdated
Comment thread js/promise-all/practice/zheleznikov.md
@zheleznikov
Copy link
Copy Markdown
Contributor Author

@vitya-ne
Витя, привет.
Извини за долгую задержку.

Отвлекся на рабочие дела и переделать пример оказалось не такой простой задачей. В результате предлагаю упростить пример и убрать отправку формы, потому что в этом примере перемешались Promise.all() и цепочка вызовов.
Теперь в примере, в случае успешного выполнения всех промисов, просто будет доступна кнопка отправки данных.
Это вполне жизненно и не перегружает.
Вот ссылка на страницу на превью: https://content-5989.dev.doka.guide/js/promise-all/

enableSubmitButton()
})
.catch((error) => {
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.

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

@vitya-ne
Copy link
Copy Markdown
Contributor

Теперь в примере, в случае успешного выполнения всех промисов, просто будет доступна кнопка отправки данных. Это вполне жизненно и не перегружает. Вот ссылка на страницу на превью: https://content-5989.dev.doka.guide/js/promise-all/

Я посмотрел на текущую реализацию немного под другим углом...
Сейчас получается что мы должны выполнять Promise.all() при любом изменении зависимых полей в форме. При этом будут выполняться все три проверки, даже если рузльтат первой вернёт false.
Насколько это оптимальный подход ?
В первоначальном варианте, выполнение всех проверок было оправдано, так как происходило однакратно при попытке отправки формы.

@github-actions
Copy link
Copy Markdown

Превью контента из bbbdad0 опубликовано.

@zheleznikov
Copy link
Copy Markdown
Contributor Author

Теперь в примере, в случае успешного выполнения всех промисов, просто будет доступна кнопка отправки данных. Это вполне жизненно и не перегружает. Вот ссылка на страницу на превью: https://content-5989.dev.doka.guide/js/promise-all/

Я посмотрел на текущую реализацию немного под другим углом... Сейчас получается что мы должны выполнять Promise.all() при любом изменении зависимых полей в форме. При этом будут выполняться все три проверки, даже если рузльтат первой вернёт false. Насколько это оптимальный подход ? В первоначальном варианте, выполнение всех проверок было оправдано, так как происходило однакратно при попытке отправки формы.

Ну да, теперь сложно объяснить использование Promise.all() для этой цели. Теперь мне даже не нравится первоначальный вариант, потому что можно было просто сделать валидацию на бэкенде в момент регистрации.
Предлагаю пока что захолдить этот совет. Подумаю, насколько он полезен.
Просто хотелось показать случай, когда нужно получить какую-то информацию из нескольких источников и если вся информация пришла, то какая-то возможность становится доступной.

@vitya-ne
Copy link
Copy Markdown
Contributor

Теперь в примере, в случае успешного выполнения всех промисов, просто будет доступна кнопка отправки данных. Это вполне жизненно и не перегружает. Вот ссылка на страницу на превью: https://content-5989.dev.doka.guide/js/promise-all/

Я посмотрел на текущую реализацию немного под другим углом... Сейчас получается что мы должны выполнять Promise.all() при любом изменении зависимых полей в форме. При этом будут выполняться все три проверки, даже если рузльтат первой вернёт false. Насколько это оптимальный подход ? В первоначальном варианте, выполнение всех проверок было оправдано, так как происходило однакратно при попытке отправки формы.

Ну да, теперь сложно объяснить использование Promise.all() для этой цели. Теперь мне даже не нравится первоначальный вариант, потому что можно было просто сделать валидацию на бэкенде в момент регистрации. Предлагаю пока что захолдить этот совет. Подумаю, насколько он полезен. Просто хотелось показать случай, когда нужно получить какую-то информацию из нескольких источников и если вся информация пришла, то какая-то возможность становится доступной.

Можно подумать как изменить описание самой формы.
Но я предлагаю сохранить первоначальную конструкцию с немного изменённым флоу:

PromoseAll([check1(), check2(), check3()])
  .then(()=> {
    return true
  })
  .catch((error) => {
    showValidationError(error)
    return false
  })
  .then(valid=> {
    if (valid) {
      return submitRegistration({ email, login, promoCode }))
  })
  .catch((error) => {
    showSubmitError(error)
  })

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

js Контент по JavaScript

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants