stream: make _write() optional when _writev() is implemented
When implementing _writev, _write should be optional. PR-URL: https://github.com/nodejs/node/pull/29639 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Minwoo Jung <minwoo@nodesource.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
68d6c4c661
commit
d398b8f02b
@ -1687,8 +1687,8 @@ const myWritable = new Writable({
|
|||||||
The `stream.Writable` class is extended to implement a [`Writable`][] stream.
|
The `stream.Writable` class is extended to implement a [`Writable`][] stream.
|
||||||
|
|
||||||
Custom `Writable` streams *must* call the `new stream.Writable([options])`
|
Custom `Writable` streams *must* call the `new stream.Writable([options])`
|
||||||
constructor and implement the `writable._write()` method. The
|
constructor and implement the `writable._write()` and/or `writable._writev()`
|
||||||
`writable._writev()` method *may* also be implemented.
|
method.
|
||||||
|
|
||||||
#### Constructor: new stream.Writable([options])
|
#### Constructor: new stream.Writable([options])
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
@ -1777,6 +1777,12 @@ const myWritable = new Writable({
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### writable.\_write(chunk, encoding, callback)
|
#### writable.\_write(chunk, encoding, callback)
|
||||||
|
<!-- YAML
|
||||||
|
changes:
|
||||||
|
- version: REPLACEME
|
||||||
|
pr-url: https://github.com/nodejs/node/pull/29639
|
||||||
|
description: _write() is optional when providing _writev().
|
||||||
|
-->
|
||||||
|
|
||||||
* `chunk` {Buffer|string|any} The `Buffer` to be written, converted from the
|
* `chunk` {Buffer|string|any} The `Buffer` to be written, converted from the
|
||||||
`string` passed to [`stream.write()`][stream-write]. If the stream's
|
`string` passed to [`stream.write()`][stream-write]. If the stream's
|
||||||
@ -1790,7 +1796,8 @@ const myWritable = new Writable({
|
|||||||
argument) when processing is complete for the supplied chunk.
|
argument) when processing is complete for the supplied chunk.
|
||||||
|
|
||||||
All `Writable` stream implementations must provide a
|
All `Writable` stream implementations must provide a
|
||||||
[`writable._write()`][stream-_write] method to send data to the underlying
|
[`writable._write()`][stream-_write] and/or
|
||||||
|
[`writable._writev()`][stream-_writev] method to send data to the underlying
|
||||||
resource.
|
resource.
|
||||||
|
|
||||||
[`Transform`][] streams provide their own implementation of the
|
[`Transform`][] streams provide their own implementation of the
|
||||||
@ -1833,8 +1840,8 @@ This function MUST NOT be called by application code directly. It should be
|
|||||||
implemented by child classes, and called by the internal `Writable` class
|
implemented by child classes, and called by the internal `Writable` class
|
||||||
methods only.
|
methods only.
|
||||||
|
|
||||||
The `writable._writev()` method may be implemented in addition to
|
The `writable._writev()` method may be implemented in addition or alternatively
|
||||||
`writable._write()` in stream implementations that are capable of processing
|
to `writable._write()` in stream implementations that are capable of processing
|
||||||
multiple chunks of data at once. If implemented, the method will be called with
|
multiple chunks of data at once. If implemented, the method will be called with
|
||||||
all chunks of data currently buffered in the write queue.
|
all chunks of data currently buffered in the write queue.
|
||||||
|
|
||||||
|
@ -565,7 +565,11 @@ function clearBuffer(stream, state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Writable.prototype._write = function(chunk, encoding, cb) {
|
Writable.prototype._write = function(chunk, encoding, cb) {
|
||||||
|
if (this._writev) {
|
||||||
|
this._writev([{ chunk, encoding }], cb);
|
||||||
|
} else {
|
||||||
cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
|
cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Writable.prototype._writev = null;
|
Writable.prototype._writev = null;
|
||||||
|
@ -119,3 +119,12 @@ function test(decode, uncork, multi, next) {
|
|||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const w = new stream.Writable({
|
||||||
|
writev: common.mustCall(function(chunks, cb) {
|
||||||
|
cb();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
w.write('asd', common.mustCall());
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user