Рубрики
Без рубрики

В ожидании нескольких запросов, чтобы закончить, используя обещание. Все

Первоначально опубликовано на CoreyCleary.me. Это кросс-пост из моего блога контента. Я публикую новое продолжение … Tagged с узлом, JavaScript.

Первоначально опубликовано в coreycleary.me . Это кросс-пост из моего блога контента. Я публикую новый контент каждую неделю или две, и вы Можно Зарегистрируйтесь в моей рассылке Если вы хотите получить мои статьи непосредственно в свой почтовый ящик! Я также регулярно отправляю чит -листы и другие бесплатные.

Сценарий : Вы хотите сделать несколько запросов одновременно и дождаться, пока все они закончат, прежде чем вернуть все данные. Или, в качестве альтернативы, вам не нужно возвращать какие -либо данные, но вместо этого нужно просто их выполнять, прежде чем функция вернется.

Может быть, вы ищете аналогичные запросы на x номер за раз.

Или, может быть, вам нужно ждать, пока запросы закончат, прежде чем вернуть веб -страницу или ответ.

Вместо того, чтобы делать что -то вроде:

const response1 = await apiRequest()
const response2 = await apiRequest()
const response3 = await databaseRequest()

return [response1, response2, response3]

Или что -то вроде этого, где вы зацикливаете:

const responses = []

for (let i = 0; i < 50; i++) {
  const data = await apiRequest()
  responses.push(data)
}

… Существует гораздо более простой способ выполнения этих асинхронных функций.

Необходимость ждать каждого запроса, чтобы закончить, прежде чем сделать следующий, это боль … И если ваш вариант использования таков, что не имеет значения, в каком порядок они используются, не используя удары по производительности.

Обещай. Все () на помощь!

Обещание. Все это нативная функция, которая решит эту проблему для нас.

Это позволяет нам выполнять массив функций перспективы/асинхрон, и он будет ждать, пока каждый из них закончит, прежде чем вернуться.

Поэтому всякий раз, когда у вас есть асинхронные функции, которые необходимо выполнять вместе, и вам нужно ждать, пока все они закончат, используйте обещание. Все.

Например, представьте, что вы создаете часть профиля пользователя приложения панели панели. И вам нужно сделать несколько HTTP -запросов и запрос базы данных, чтобы получить данные для пользователя. Но это должно быть возвращено вместе.

Посмотрим, как это выглядит в коде …

const userProfileData = await Promise.all([
  getSettings(user)
  getMetadata(user)
  getDefaultLayoutConfig()
])

// destructured example
const [settings, metadata, defaultConfig] = await Promise.all([
  getSettings(user)
  getMetadata(user)
  getDefaultLayoutConfig()
])

Еще одно преимущество использования обещания. Все состоит в том, что он начнет одновременно по функциям – одновременно – в отличие от начала, ожидая, когда они закончатся, затем запустите следующий. Узнайте больше об этом здесь.

Обработка ошибок

Быстрое примечание о том, что произойдет, если одна из функций обещания/асинхронизации не удается при использовании обещания. Все – она использует подход «неудачный», поэтому первая функция для снятия вызовет остальные функции не выполняться.

Вместо этого обещайте. Все выйдут рано. И это вернет отклоненное обещание.

Есть способы справиться с этим по -другому, используя .catch () Но я оставляю этот пост ограниченным тем, чтобы сделать несколько запросов. Я расскажу о различных способах обработки ошибок. ВСЕ В будущем посте.

Завершая

Итак, в следующий раз, когда у вас будет сценарий, в котором у вас будет связанный набор данных, необходимые для асинхронного запроса и возврата – и эти функции не зависят друг от друга, их можно выполнить одновременно – используйте обещание. Все!

Любите JavaScript, но все еще сбиты с толку архитектурными вещами и как вы должны структурировать свой сервис? Я публикую статьи о JavaScript и узле каждые 1-2 недели, поэтому, если вы хотите получать все новые статьи непосредственно в свой почтовый ящик, Вот эта ссылка снова подписаться на мою бюллетени!

Оригинал: “https://dev.to/ccleary00/awaiting-multiple-requests-to-finish-using-promise-all-18gl”