Для опроса большого количества эндпоинтов за малый интервал в Node.js можно использовать асинхронный подход, основанный на промисах и асинхронных функциях.
Первым шагом необходимо установить необходимые зависимости. Для работы с промисами можно использовать библиотеку "axios", а для работы с асинхронными функциями можно использовать синтаксис async/await.
npm install axios
Затем создаем функцию, которая будет опрашивать эндпоинты. Например, пусть у нас есть массив с URL-ами эндпоинтов, которые необходимо опросить. Мы можем использовать метод Promise.all
, который позволяет выполнить несколько промисов параллельно.
const axios = require('axios'); async function queryEndpoints(endpointUrls) { try { const requests = endpointUrls.map(url => axios.get(url)); const responses = await Promise.all(requests); return responses.map(response => response.data); } catch (error) { console.error('Error:', error); } }
В этом примере мы создаем массив промисов с помощью функции axios.get
для каждого URL-а из массива endpointUrls
. Затем мы используем Promise.all
, чтобы выполнить все промисы параллельно. Результаты запросов хранятся в массиве responses
.
Функция queryEndpoints
возвращает массив с данными, полученными в ответ на запросы. В случае возникновения ошибки при запросе, будет выведено сообщение об ошибке в консоль.
Теперь мы можем вызвать функцию queryEndpoints
и передать ей массив с эндпоинтами, которые нужно опросить.
const endpointUrls = [ 'https://api.example.com/endpoint1', 'https://api.example.com/endpoint2', 'https://api.example.com/endpoint3', // ...другие URL-ы эндпоинтов... ]; queryEndpoints(endpointUrls) .then(data => { console.log(data); }) .catch(error => { console.error('Error:', error); });
В результате выполнения этого кода мы получим массив с данными, полученными в ответ на запросы эндпоинтов.
Такой подход позволяет опрашивать большое количество эндпоинтов параллельно, что позволяет значительно сократить время выполнения операции. Однако, следует помнить о граничных случаях, например, ограничениях на количество параллельных запросов и обрабатывать их соответствующим образом. Также следует учитывать нагрузку на сервера эндпоинтов и при необходимости использовать механизмы ограничения количества запросов.