我无法通过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)
退回的承诺的速度非常慢,对吗?