每当有请求到来时,我都会从Node.js服务器分块发送数据。使用Expressjs。
router.post('/api/test', (req, res) => {
console.log("Started api servicing");
let interval = setInterval(() => {
res.write("Message");
}, 500);
setTimeout(() => {
clearInterval(interval);
res.end("Done");
}, 1000*10);
})
这会在10秒的时间内发送"Message"
20次。
使用Fetch API从客户端调用此终结点。我的想法是,我应该能够在客户端分别接收每个"Message"
,这是我提出的实现。
fetch('/api/test', { method: 'POST' })
.then(res => res.body.getReader())
.then(reader => processData(reader))
function processData(reader) {
reader.read().then(({value, done}) => {
console.log(String.fromCharCode.apply(null, value));
if (!done) {
processData(reader)
}
})
return null;
}
我希望每次从服务器发送"Message"
时(即每0.5秒一次),处理程序函数都会控制台日志。但是在firefox中,仅在10秒之后,所有数据都立即被控制台记录,如下所示:
"MessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageMessageDone"
它在Chrome中正常运行,即"Message"
每0.5秒被控制台记录一次。
为什么会发生这种情况以及如何在Firefox中解决此问题?