在Firefox中使用Fetch API接收流数据

时间:2019-12-13 08:46:45

标签: javascript node.js stream fetch

每当有请求到来时,我都会从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中解决此问题?

0 个答案:

没有答案