HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Пока ещё не уложилось в голове, поэтому буду подглядывать сюда при написании реального кода. Если надо выполнить промисы последовательно =&gt; строим цепочку промисов с помощью reduce Если надо выполнить промисы одновременно =&gt; делаем массив промисов и с помощью map и применяем Promise.All</p>
1 <p>Пока ещё не уложилось в голове, поэтому буду подглядывать сюда при написании реального кода. Если надо выполнить промисы последовательно =&gt; строим цепочку промисов с помощью reduce Если надо выполнить промисы одновременно =&gt; делаем массив промисов и с помощью map и применяем Promise.All</p>
2 <p>Создание цепочки промисов из массива:</p>
2 <p>Создание цепочки промисов из массива:</p>
3 <p>const getTypes = (list) =&amp;gt; list.reduce((result, path) =&amp;gt; result .then((content) =&amp;gt; fsp .stat(path) .then((data) =&amp;gt; content.concat( data.isDirectory() ? 'directory' : data.isFile() ? 'file' : null) ) .catch (() =&amp;gt; content.concat(null)) ) , Promise.resolve([]) );</p>
3 <p>const getTypes = (list) =&amp;gt; list.reduce((result, path) =&amp;gt; result .then((content) =&amp;gt; fsp .stat(path) .then((data) =&amp;gt; content.concat( data.isDirectory() ? 'directory' : data.isFile() ? 'file' : null) ) .catch (() =&amp;gt; content.concat(null)) ) , Promise.resolve([]) );</p>
4 <p>Promise.All Мой вариант:</p>
4 <p>Promise.All Мой вариант:</p>
5 <p>const getBadLinks = async (url) =&amp;gt; { const content = (await axios.get(url)).data; const allLinks = extractLinks(content); const badLinks = []; const promises = allLinks.map((link) =&amp;gt; new Promise((resolve, reject) =&amp;gt; { axios.get(link) .then((response) =&amp;gt; { if (!response || response.status !== 200) { badLinks.push(link); }; resolve(); }) .catch((e) =&amp;gt; { badLinks.push(link); resolve(); }); }) ); await Promise.all(promises); return badLinks; }</p>
5 <p>const getBadLinks = async (url) =&amp;gt; { const content = (await axios.get(url)).data; const allLinks = extractLinks(content); const badLinks = []; const promises = allLinks.map((link) =&amp;gt; new Promise((resolve, reject) =&amp;gt; { axios.get(link) .then((response) =&amp;gt; { if (!response || response.status !== 200) { badLinks.push(link); }; resolve(); }) .catch((e) =&amp;gt; { badLinks.push(link); resolve(); }); }) ); await Promise.all(promises); return badLinks; }</p>
6 <p>Шаблонный вариант:</p>
6 <p>Шаблонный вариант:</p>
7 <p>export default async (initialLink) =&amp;gt; { const response = await axios.get(initialLink); const links = extractLinks(response.data); const request = (link) =&amp;gt; axios.get(link).then(() =&amp;gt; null).catch(() =&amp;gt; link); const promises = links.map(request); const results = await Promise.all(promises); return results.filter((result) =&amp;gt; result !== null); };</p>
7 <p>export default async (initialLink) =&amp;gt; { const response = await axios.get(initialLink); const links = extractLinks(response.data); const request = (link) =&amp;gt; axios.get(link).then(() =&amp;gt; null).catch(() =&amp;gt; link); const promises = links.map(request); const results = await Promise.all(promises); return results.filter((result) =&amp;gt; result !== null); };</p>