Сделать N асинхронных запросов через равный промежуток и обработать ответ (Node JS)

коллеги. Направьте на верный путь. Задача: при определенном условии сделать 3 запроса на сервер с интервалом 10 секунд и сохранить результат выполнения каждого в массив и далее уже обработать этот массив.

Я набросал "это"

module.exports = (cronString) => {
    cron.schedule(cronString, async function() {
        const queue = await axios.get(API_BASE+'/smpp/queue')
        const currentQueueCount = queue.data.count || 0 // Сохраним текущее число очереди
        const tempRaw = fs.readFileSync(path.join(__dirname, '../temp/queue.json')) // JSON 
        const tempJson = JSON.parse(tempRaw);

        console.log(currentQueueCount);
        //Если очередь > 10 И последние 3 запроса находятся в интервале от 10 до 20:  делаем информирование
        if(currentQueueCount >= 0 ) {
            const tempArray = await checkQueue(3)
        }


        if(tempJson.length > 10) {
            console.log('Need clear')
        } 
        tempJson.push({
            date: new Date().toLocaleTimeString(),
            queue: currentQueueCount
        })
        
        
        fs.writeFileSync(path.join(__dirname, '../temp/queue.json'),JSON.stringify(tempJson))
    });
    }
    
    
   async function checkQueue(count){
            const reqCount  = count;//Кол-во запросов
            let temp = []
            let i =0;
            //делаем 3 запроса через 10 секунд
            let timer = setInterval(async () =>{
                console.log(i);
                if(i< reqCount) {

                    const tempReq = await axios.get(API_BASE+'/smpp/queue')
                    temp.push(tempReq.data.count || 0)
                    console.log(tempReq.data.count || 0);
                    i++
                } else{

                    clearInterval(timer);
                }
                
            }, 10000)
}

Но у меня просто не выполняется функция checkQueue

Вообще, как правильно реализовать такой функционал, т.к. он не один раз встречается в проекте.


Ответы (1 шт):

Автор решения: nörbörnën
const {promisify} = require('util');
const sleep = promisify(setTimeout);

async function fn() {
  const data1 = await axios.get();
  await sleep(10 * 1000);
  const data2 = await axios.get();
  await sleep(10 * 1000);
  const data3 = await axios.get();
  ...
}

А, если нужна работающая очередь, используйте p-queue

→ Ссылка