Запросы к БД в setInterval без утечек памяти
Как правильно использовать setInterval или вложенный setTimout, чтобы делать запросы к бд каждые n секунд?
На данный момент реализация самая простая:
setInterval(async () => {
await new Test(dbconnection).getData()
}, 3000)
Если в запросе много данных, то спустя время выкидывает ошибку reach heap out of memory
Прочитал, что это связано с утечкой памяти, как ее избежать?
Данный сервер перекидывает данные из MSSQL в POSTGRESQL:
class Test {
constructor(db) {
this.db = db
this.result = null
}
getData() {
return new Promise(resolve => {
let request = new Request(
'SELECT ... FROM ... WHERE DateTime > dateadd(dd,-1,getdate()) FOR JSON PATH',
err => {
if (err) {
console.log(err)
}
}
)
let string = ''
request.on('row', columns => {
columns.forEach((column, num) => {
return (string += column.value)
})
})
request.on('requestCompleted', async function (rowCount, more) {
if (string) {
this.result = JSON.parse(string)
await this.result.forEach(async item => {
await db.query(
`INSERT INTO ... (...) values (...) ON CONFLICT DO NOTHING`,
[
...
]
)
})
}
resolve(this.result)
})
this.db.execSql(request)
})
}
}
Источник: Stack Overflow на русском