res.flush () не отправляет строки клиенту один за другим - PullRequest
0 голосов
/ 13 марта 2019

У меня есть миллионы данных, извлеченных из хранимой процедуры базы данных sql на стороне сервера. То, что я пытаюсь достичь, - это отправлять 10000 строк одновременно с помощью res.flush (). логика работает, но она отправляет все сброшенные данные клиенту одновременно. Что-то не так, что я делаю на стороне клиента или сервера? Вот код сервера:

const request = new sql.Request(dbConn);
            request.stream = true;
            request.query(`EXEC spGet ${account_number};`);

            let rowCount = 0;
            const BATCH_SIZE = 10000;
            res.setHeader('Content-Type', 'text/event-stream')
            res.setHeader('Cache-Control', 'no-cache')
            request.on('recordset', () => {
                res.write('[');
            });

            request.on('row', row => {
              if (rowCount > 0){
                res.write(',');
              }

              if (rowCount % BATCH_SIZE === 0){
                  rowCount = 0;
                  res.flush();
              }

              res.write(JSON.stringify(row));
              rowCount++;
            });

            request.on('done', ()=> {
              res.write(']');
              sql.close();
              res.end();
            });

Вот код клиента responsejs. Я вызываю api fetch только один раз:

export const fetchData = (id) => dispatch => {
    return getData('/api/fetchdata', id).then(data => {

            dispatch(saveTransactionData(data))
        })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...