У меня в базе данных реального времени более 20 тыс. Документов. Мне нужно транслировать их, но я даже не знаю, с чего начать. Это то, к чему я пытался пойти
sendEmail.get('/:types/:message', cors(), async (req, res, next) => {
console.info(5);
const types = JSON.parse(req.params.types);
console.info('types', types);
let recipients = [];
let mails = [];
if (types.includes('students')) {
console.info(1);
const tmpUsers = await admin.database().ref('Users').orderByChild('student').equalTo(true).once('value').then(r => r.val()).catch(e => console.info(e));
recipients = recipients.concat(tmpUsers);
}
if (types.includes('solvers')) {
console.info(2);
let tmpUsers = await admin.database().ref('Users').orderByChild('userType').equalTo('person').once('value').then(r => r.val()).catch(e => console.info(e));
tmpUsers = tmpUsers.concat(arrayFromObject(await admin.database().ref('Users').orderByChild('userType').equalTo('company').once('value').then(r => r.val()).catch(e => console.info(e))));
recipients = recipients.concat(tmpUsers);
}
});
Но этот код приводит к тому, что моему серверу не хватает памяти. Кто-то предложил потоки в моем предыдущем вопросе, но насколько мне нравится эта идея, я понятия не имею, как на самом деле выполнять потоковую передачу. Я знаю, это должно быть примерно так:
const fs = require('fs');
const readStream = fs.createReadStream('path goes here');
const data = [];
readStream.on('data', chunk => {
data.push(chunk);
})
readStream.on('end', () => {
console.info(data);
res.end(data);
});
Но как мне передать в путь запрос базы данных?
Я пробовал это, но там написано Argument type Promise is not assignable to parameter type PathLike, что имеет смысл, но как мне это обойти?
const users = fs.createReadStream(admin.database().ref('News').once('value').then(r => r.val()))
Подводя итог: как передавать данные из базы данных Firebase в реальном времени в потоковом режиме?
Редактировать: Как это дубликат? Это 2 совершенно разных вопроса. Начальный код тот же, но способы решения, о которых я спрашиваю, совершенно разные



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


База данных Realtime не имеет потоковых API. Когда вы выполняете запрос, весь набор результатов всегда загружается в память за один раз.
Возможная альтернатива - пролистать результаты с помощью limitToFirst () вместе с некоторым упорядочением запросов, которое позволяет выполнять последующий запрос после обработки первого пакета элементов, начиная с того места, где остановился последний запрос.
Как это дубликат? Это 2 совершенно разных вопроса. Начальный код тот же, но способы решения, о которых я спрашиваю, совершенно разные