new stream.Writable([options])
options<Object>highWaterMark<number>stream.write()开始返回false时的缓冲级别。默认值:65536(64 KiB),或objectMode流的16。decodeStrings<boolean> 是否在将string传递给stream.write()之前将其编码为Buffer(使用stream.write()调用中指定的编码),然后再传递给stream._write()。其他类型的数据不会被转换(即Buffer不会被解码为string)。设置为 false 将阻止string被转换。默认值:true。defaultEncoding<string> 当没有指定编码作为stream.write()的参数时使用的默认编码。默认值:'utf8'。objectMode<boolean>stream.write(anyObj)是否是有效操作。当设置后,如果流实现支持,就可以写入除字符串、<Buffer>、<TypedArray> 或 <DataView> 之外的 JavaScript 值。 默认值:false。emitClose<boolean> 流在被销毁后是否应发出'close'。默认值:true。write<Function>stream._write()方法的实现。writev<Function>stream._writev()方法的实现。destroy<Function>stream._destroy()方法的实现。final<Function>stream._final()方法的实现。construct<Function>stream._construct()方法的实现。autoDestroy<boolean> 是否在结束后自动在自身上调用.destroy()。默认值:true。signal<AbortSignal> 表示可能取消的信号。
const { Writable } = require('node:stream');
class MyWritable extends Writable {
constructor(options) {
// Calls the stream.Writable() constructor.
super(options);
// ...
}
} 或者,当使用 ES6 之前的样式构造函数时:
🌐 Or, when using pre-ES6 style constructors:
const { Writable } = require('node:stream');
const util = require('node:util');
function MyWritable(options) {
if (!(this instanceof MyWritable))
return new MyWritable(options);
Writable.call(this, options);
}
util.inherits(MyWritable, Writable); 或者,使用简化的构造函数方法:
🌐 Or, using the simplified constructor approach:
const { Writable } = require('node:stream');
const myWritable = new Writable({
write(chunk, encoding, callback) {
// ...
},
writev(chunks, callback) {
// ...
},
}); 对传入的 AbortSignal 对应的 AbortController 调用 abort,其行为与在可写流上调用 .destroy(new AbortError()) 相同。
🌐 Calling abort on the AbortController corresponding to the passed
AbortSignal will behave the same way as calling .destroy(new AbortError())
on the writeable stream.
const { Writable } = require('node:stream');
const controller = new AbortController();
const myWritable = new Writable({
write(chunk, encoding, callback) {
// ...
},
writev(chunks, callback) {
// ...
},
signal: controller.signal,
});
// Later, abort the operation closing the stream
controller.abort();