Интервал не выполняется каждые 5 секунд

#node.js #azure-cosmosdb

#node.js #azure-cosmosdb

Вопрос:

 setInterval(async () => {
    var time = Math.floor(Date.now() / 1000);
    const { result: newevents } = await client.database("database").container("collection").items.query(`SELECT * FROM Events c WHERE c._ts >= ${time - 5} AND c._ts < ${time}`, { enableCrossPartitionQuery: true }).toArray();

    newevents.forEach((element) => {
        redisClientEventData.set(element.id, JSON.stringify(element));
    });        
}, 5000);
  

Я запускаю этот код каждые 5 секунд, чтобы получать события из cosmosdb в 5-секундном окне, а запрос к базе данных обычно занимает всего 40-60 мс. Однако со временем он пропустит секунду и события. Есть ли какой-либо способ гарантировать, что я смогу получать каждое событие каждые 5 секунд? Я попробовал цикл while, но, похоже, не сработало. Обычно это будет работать в течение 6-12 часов, но затем пропустите секунду.

Я ожидаю увидеть что-то вроде

1553786056

1553786061

1553786066

1553786071

Но со временем я в конечном итоге вижу

1553786056

1553786061

1553786067

1553786072

Комментарии:

1. Выполняется ли какое-либо другое задание или задачи в том же процессе узла?

2. Нет, это единственное. Я просто опустил требования выше этого.

3. Похоже, это решает именно вашу проблему npmjs.com/package/accurate-interval . «Создайте точный интервал, который не искажается со временем».

4. Как вы регистрируете время? использовать console.log или войти в базу данных?

5. @acarlstein … Может быть, прочитать предыдущие комментарии?