Все статьи | Блог студента

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

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

Пока ещё не уложилось в голове, поэтому буду подглядывать сюда при написании реального кода. Если надо выполнить промисы последовательно => строим цепочку промисов с помощью 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
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
18 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
18 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
18 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
18 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
18 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
18 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
18 мая 5 месяцев