我使用 async for 在使用 node.js 处理来自进程的输出流方面取得了巨大成功,但我正在努力获得一些我希望可以与浏览器fetchAPI“正常工作”的东西。
这非常适合异步处理来自进程的输出流块:
for await (const out of proc.child.stdout) {
...
}
(当然在这里的异步函数上下文中)
我试图在浏览器中做类似的事情,我想在数据从服务器发送给我的同时访问数据。
for await (const chunk of (await fetch('/data.jsonl')).body) {
console.log('got', chunk);
}
Uncaught TypeError: (intermediate value).body is not async iterable这在 Chrome ( )中不起作用。
对于我的用例,这不是必需的,所以我现在只是let data = await (await fetch(datapath)).text();在我的客户端代码中使用。这类似于在等待的获取中使用 of.json()而不是.text(),因此在浏览器接收到整个响应之前不会开始任何处理。由于显而易见的原因,这并不理想。
我在看Oboe.js (我认为相关的 impl 就在附近),它几乎可以处理这个问题,但它的内部结构相当丑陋,所以看起来这可能是目前唯一的方法?
如果没有实现异步迭代(意味着还不能使用 async for),难道没有另一种方法可以实际使用 ReadableStream 吗?