До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

Главная | Все статьи | Дневник студента

Промис на основе массива

Время чтения статьи ~1 минута
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Промис на основе массива главное изображение

Пока ещё не уложилось в голове, поэтому буду подглядывать сюда при написании реального кода. Если надо выполнить промисы последовательно => строим цепочку промисов с помощью reduce Если надо выполнить промисы одновременно => делаем массив промисов и с помощью map и применяем Promise.All

Создание цепочки промисов из массива:

const getTypes = (list) => list.reduce((result, path) => result
      .then((content) => fsp
          .stat(path)
          .then((data) => content.concat(
            data.isDirectory() ? 'directory'
              : data.isFile() ? 'file'
                : null)
          )
          .catch (() => content.concat(null))
      )
  , Promise.resolve([])
);

Promise.All Мой вариант:

const getBadLinks = async (url) => {
  const content = (await axios.get(url)).data;
  const allLinks = extractLinks(content);
  const badLinks = [];
  const promises = allLinks.map((link) => new Promise((resolve, reject) => {
      axios.get(link)
        .then((response) => {
          if (!response || response.status !== 200) {
            badLinks.push(link);
          };
          resolve();
        })
        .catch((e) => {
          badLinks.push(link);
          resolve();
        });
    })
  );
  await Promise.all(promises);
  return badLinks;
}

Шаблонный вариант:

export default async (initialLink) => {
  const response = await axios.get(initialLink);
  const links = extractLinks(response.data);
  const request = (link) => axios.get(link).then(() => null).catch(() => link);
  const promises = links.map(request);
  const results = await Promise.all(promises);
  return results.filter((result) => result !== null);
};
Аватар пользователя Avshukan
Avshukan 12 октября 2021
0
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября