Потоковая передача данных из базы данных Firebase Realtime

У меня в базе данных реального времени более 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 совершенно разных вопроса. Начальный код тот же, но способы решения, о которых я спрашиваю, совершенно разные

Как это дубликат? Это 2 совершенно разных вопроса. Начальный код тот же, но способы решения, о которых я спрашиваю, совершенно разные

Alex Ironside 14.11.2018 15:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
1 632
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

База данных Realtime не имеет потоковых API. Когда вы выполняете запрос, весь набор результатов всегда загружается в память за один раз.

Возможная альтернатива - пролистать результаты с помощью limitToFirst () вместе с некоторым упорядочением запросов, которое позволяет выполнять последующий запрос после обработки первого пакета элементов, начиная с того места, где остановился последний запрос.

Другие вопросы по теме