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

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

Время чтения статьи ~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
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 2 мая
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 2 мая
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 2 мая
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 2 мая
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 2 мая
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 2 мая
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
в разработке
Старт 2 мая
профессия
Верстка с использованием последних стандартов CSS
5 месяцев
с нуля
Старт в любое время