跳转到内容
搜索文档

Streams

最后更新 查看 MarkdownAgent 设置

Node.js streams API 是 JavaScript 中处理流数据的原始 API,早于 WHATWG ReadableStream 标准。流是 Node.js 中处理流数据的抽象接口。流可以是可读的、可写的,或两者兼有。所有流都是 EventEmitter 的实例。

在可能的情况下,应使用 WHATWG 标准「Web Streams」APIWorkers 已支持该 API

import { Readable, Transform } from "node:stream";

import { text } from "node:stream/consumers";

import { pipeline } from "node:stream/promises";

// A Node.js-style Transform that converts data to uppercase
// and appends a newline to the end of the output.
class MyTransform extends Transform {
	constructor() {
		super({ encoding: "utf8" });
	}
	_transform(chunk, _, cb) {
		this.push(chunk.toString().toUpperCase());
		cb();
	}
	_flush(cb) {
		this.push("\n");
		cb();
	}
}

export default {
	async fetch() {
		const chunks = [
			"hello ",
			"from ",
			"the ",
			"wonderful ",
			"world ",
			"of ",
			"node.js ",
			"streams!",
		];

		function nextChunk(readable) {
			readable.push(chunks.shift());
			if (chunks.length === 0) readable.push(null);
			else queueMicrotask(() => nextChunk(readable));
		}

		// A Node.js-style Readable that emits chunks from the
		// array...
		const readable = new Readable({
			encoding: "utf8",
			read() {
				nextChunk(readable);
			},
		});

		const transform = new MyTransform();
		await pipeline(readable, transform);
		return new Response(await text(transform));
	},
};

更多信息请参阅 Node.js stream 文档

这篇文档对您有帮助吗?