У меня есть миллионы данных, извлеченных из хранимой процедуры базы данных 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))
})
}