rats-search/src/background/forBigTable.js
2021-06-16 01:04:48 +03:00

24 lines
656 B
JavaScript

module.exports = (sphinx, table, callback, doneCallback, max = 1000, where = '', intermediateCallback = null) => new Promise((done) => {
const checker = async (index = 0) => {
const finish = () => {
if(doneCallback)
doneCallback(true)
done(true)
}
const data = await sphinx.query(`SELECT * FROM ${table} WHERE id > ${index} ${where} ORDER BY id ASC LIMIT ${max}`);
if(data.length == 0) {
finish()
return;
}
await Promise.all(data.map(callback));
if(intermediateCallback)
await intermediateCallback(data[data.length - 1]);
if(data.length === max)
checker(data[data.length - 1].id)
else
finish()
}
checker()
})