/
Блог Хекслета
/
Дневник студента
/

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

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

12 октября 2021 г.

0 минут
Промис на основе массива

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

5 лет назад

0

Категории

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845