fetch()上的Back Pressure在Google Chrome中无效

时间:2018-02-14 18:57:49

标签: javascript google-chrome reactive-programming spring-webflux reactive-streams

我无法通过JavaScript的新Streams API从我的WebFlux服务器中获取响应。

我可以通过Curl(在--limit-rate的帮助下)看到服务器正在按预期放慢速度,但是当我尝试在Google Chrome(64.0.3282.140)中使用正文时,它不会减慢速度喜欢它。实际上,即使只有大约187 kB传递给write(),Chrome也会从服务器下载并缓冲大约32 MB。

我的JavaScript有问题吗?

async function fetchStream(url, consumer) {
    const response = await fetch(url, {
        headers: {
            "Accept": "application/stream+json"
        }
    });
    const decoder = new TextDecoder("utf-8");
    let buffer = "";
    await response.body.pipeTo(new WritableStream({
        async write(chunk) {
            buffer += decoder.decode(chunk);
            const blocks = buffer.split("\n");
            if (blocks.length === 1) {
                return;
            }
            const indexOfLastBlock = blocks.length - 1;
            for (let index = 0; index < indexOfLastBlock; index ++) {
                const block = blocks[index];
                const item = JSON.parse(block);
                await consumer(item);
            }
            buffer = blocks[indexOfLastBlock];
        }
    }));
}

根据the specification for Streams

  

如果未提供策略,则默认行为将与a相同   CountQueuingStrategy的水印分数为1。

所以 应该减慢consumer(item)退回的承诺的速度非常慢,对吗?

0 个答案:

没有答案