我正在尝试了解TS异步生成器。
在Node.js中,我打开一个套接字,从中读取所有数据,然后关闭它。
我试图通过数据块将其变成异步生成器。
core_config_data
可以为从套接字读取的数据创建异步生成器吗?
答案 0 :(得分:1)
有可能,这样的东西应该可以工作,直到Node.js流自己实现异步迭代协议:
import net from "net";
async function* socketIterator(
host: string, port: number, initialSend?: Buffer | string,
): AsyncIterableIterator<Buffer> {
let ended: boolean = false;
let error: Error | undefined;
let wake: () => void;
const socket = net.connect(port, host)
.on("readable", () => { wake(); })
.on("end", () => { ended = true; wake(); })
.on("error", (err) => { error = err; wake(); });
if (initialSend) {
socket.write(initialSend);
}
try {
for (;;) {
// wait for next event on socket
await new Promise<void>((res) => wake = res);
// yield all data available on socket
for (let chunk = socket.read(); chunk; chunk = socket.read()) {
yield chunk;
}
if (error) { throw error; }
if (ended) { break; }
}
}
finally {
socket.end();
}
}
async function main(): Promise<void> {
const iter = socketIterator("httpbin.org", 80, "GET / HTTP/1.0\r\n\r\n");
for await (const chunk of iter) {
console.log(chunk.toString());
}
}
main().catch(console.error);