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