Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
nodejs:steams:promise.all_restrict [2022/05/15 12:06] werwolf |
nodejs:steams:promise.all_restrict [2023/01/12 12:18] (текущий) |
||
|---|---|---|---|
| Строка 24: | Строка 24: | ||
| - | ===== ОТВЕТЫ ===== | ||
| - | === Ответ 1 === | + | |
| + | ====es6-promise-pool==== | ||
| Обратите внимание, что ''Promise.all()'' не запускает promises, чтобы начать свою работу, создавая само обещание. | Обратите внимание, что ''Promise.all()'' не запускает promises, чтобы начать свою работу, создавая само обещание. | ||
| Строка 62: | Строка 62: | ||
| </code> | </code> | ||
| - | === Ответ 2 === | + | ====p-limit==== |
| **С-Концевой** | **С-Концевой** | ||
| Строка 80: | Строка 80: | ||
| <code javascript> | <code javascript> | ||
| - | const pLimit = require('p-limit'); | + | const pLimit = require('p-limit'); |
| - | // Example Concurrency of 3 promise at once | + | // Example Concurrency of 3 promise at once |
| - | const limit = pLimit(3); | + | const limit = pLimit(3); |
| - | let urls = [ | + | let urls = [ |
| "http://www.exampleone.com/", | "http://www.exampleone.com/", | ||
| "http://www.exampletwo.com/", | "http://www.exampletwo.com/", | ||
| "http://www.examplethree.com/", | "http://www.examplethree.com/", | ||
| "http://www.examplefour.com/", | "http://www.examplefour.com/", | ||
| - | ] | + | ] |
| - | // Create an array of our promises using map (fetchData() returns a promise) | + | // Create an array of our promises using map (fetchData() returns a promise) |
| - | let promises = urls.map(url => { | + | let promises = urls.map(url => { |
| // wrap the function we are calling in the limit function we defined above | // wrap the function we are calling in the limit function we defined above | ||
| return limit(() => fetchData(url)); | return limit(() => fetchData(url)); | ||
| - | }); | + | }); |
| - | (async () => { | + | (async () => { |
| // Only three promises are run at once (as defined above) | // Only three promises are run at once (as defined above) | ||
| const result = await Promise.all(promises); | const result = await Promise.all(promises); | ||
| console.log(result); | console.log(result); | ||
| - | })(); | + | })(); |
| </code> | </code> | ||
| Результат журнала консоли - это массив данных ответа ваших разрешенных обещаний. | Результат журнала консоли - это массив данных ответа ваших разрешенных обещаний. | ||
| - | === Ответ 3 === | + | ====bluebird==== |
| [[http://bluebirdjs.com/docs/api/promise.map.html|Bluebird Promise.map]] может использовать параметр параллелизма, чтобы контролировать, сколько обещаний должно выполняться параллельно. Иногда это проще, чем ''.all'' потому что вам не нужно создавать массив обещаний. | [[http://bluebirdjs.com/docs/api/promise.map.html|Bluebird Promise.map]] может использовать параметр параллелизма, чтобы контролировать, сколько обещаний должно выполняться параллельно. Иногда это проще, чем ''.all'' потому что вам не нужно создавать массив обещаний. | ||
| Строка 128: | Строка 128: | ||
| </code> | </code> | ||
| - | === Ответ 4 === | + | ====http.Agent({maxSockets: 5})==== |
| Вместо использования обещаний для ограничения http-запросов используйте встроенный узел [[https://nodejs.org/api/http.html#http_agent_maxsockets%23http_agent_maxsockets|http.Agent.maxSockets]]. Это устраняет необходимость использования библиотеки или написания собственного кода пула и дает дополнительное преимущество, позволяющее лучше контролировать то, что вы ограничиваете. | Вместо использования обещаний для ограничения http-запросов используйте встроенный узел [[https://nodejs.org/api/http.html#http_agent_maxsockets%23http_agent_maxsockets|http.Agent.maxSockets]]. Это устраняет необходимость использования библиотеки или написания собственного кода пула и дает дополнительное преимущество, позволяющее лучше контролировать то, что вы ограничиваете. | ||
| Строка 145: | Строка 145: | ||
| Если вы делаете несколько запросов к одному и тому же источнику, вам также может быть полезно установить для ''keepAlive'' значение true (дополнительную информацию см. В документации выше). | Если вы делаете несколько запросов к одному и тому же источнику, вам также может быть полезно установить для ''keepAlive'' значение true (дополнительную информацию см. В документации выше). | ||
| - | === Ответ 5 === | + | ====iterator==== |
| Если вы знаете, как работают итераторы и как они используются, вам не понадобится дополнительная библиотека, так как создать собственный параллелизм очень просто. Позвольте мне продемонстрировать: | Если вы знаете, как работают итераторы и как они используются, вам не понадобится дополнительная библиотека, так как создать собственный параллелизм очень просто. Позвольте мне продемонстрировать: | ||
| Строка 168: | Строка 168: | ||
| </code> | </code> | ||
| - | === Ответ 6 === | + | ====p-limit MongoDB==== |
| Вот основной пример для потоковой передачи и "p-limit". Это потоковое чтение HTTP потока в Монго БД. | Вот основной пример для потоковой передачи и "p-limit". Это потоковое чтение HTTP потока в Монго БД. | ||
| Строка 214: | Строка 214: | ||
| </code> | </code> | ||
| - | === Ответ 7 === | + | ====рекурсия==== |
| Это может быть решено с помощью рекурсии. | Это может быть решено с помощью рекурсии. | ||
| Строка 258: | Строка 258: | ||
| </code> | </code> | ||
| - | === Ответ 8 === | + | ====batch-promises==== |
| Поэтому я попытался заставить некоторые показанные примеры работать для моего кода, но так как это было только для сценария импорта, а не для производственного кода, использование [[https://www.npmjs.com/package/batch-promises|пакетных обещаний]] пакета npm, несомненно, было для меня самым простым путем | Поэтому я попытался заставить некоторые показанные примеры работать для моего кода, но так как это было только для сценария импорта, а не для производственного кода, использование [[https://www.npmjs.com/package/batch-promises|пакетных обещаний]] пакета npm, несомненно, было для меня самым простым путем | ||
| Строка 296: | Строка 296: | ||
| </code> | </code> | ||
| - | === Ответ 9 === | + | ====Promise.race==== |
| Это то, что я сделал с помощью ''Promise.race'', внутри моего кода здесь | Это то, что я сделал с помощью ''Promise.race'', внутри моего кода здесь | ||
| Строка 317: | Строка 317: | ||
| Если вы хотите увидеть пример: [[https://jsfiddle.net/thecodermarcelo/av2tp83o/5|https://jsfiddle.net/thecodermarcelo/av2tp83o/5/]] | Если вы хотите увидеть пример: [[https://jsfiddle.net/thecodermarcelo/av2tp83o/5|https://jsfiddle.net/thecodermarcelo/av2tp83o/5/]] | ||
| - | === Ответ 10 === | + | ====рекурсия с внешними библиотеками==== |
| Рекурсия - это ответ, если вы не хотите использовать внешние библиотеки | Рекурсия - это ответ, если вы не хотите использовать внешние библиотеки | ||
| Строка 339: | Строка 339: | ||
| </code> | </code> | ||
| - | === Ответ 11 === | + | ====async-pool==== |
| Я предлагаю библиотеку async-pool: [[https://github.com/rxaviers/async-pool|https://github.com/rxaviers/async-pool]] | Я предлагаю библиотеку async-pool: [[https://github.com/rxaviers/async-pool|https://github.com/rxaviers/async-pool]] | ||
| Строка 349: | Строка 349: | ||
| > npm установить крошечный-асинхронный пул | > npm установить крошечный-асинхронный пул | ||
| - | === Ответ 12 === | + | ====async/await==== |
| Это становится относительно тривиально с async/await, в зависимости от того, что вы хотите, это хорошо переносится на карту с задержкой или forEach, вот реализация карты. | Это становится относительно тривиально с async/await, в зависимости от того, что вы хотите, это хорошо переносится на карту с задержкой или forEach, вот реализация карты. | ||