stream: add writableFinished
add a new getter to duplex stream to replace the property `this .writableState.finished` of the object that inherited duplex. Refs: https://github.com/nodejs/node/issues/445 PR-URL: https://github.com/nodejs/node/pull/28007 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
parent
2bb93e1108
commit
33aef82b42
@ -503,6 +503,16 @@ This property contains the number of bytes (or objects) in the queue
|
|||||||
ready to be written. The value provides introspection data regarding
|
ready to be written. The value provides introspection data regarding
|
||||||
the status of the `highWaterMark`.
|
the status of the `highWaterMark`.
|
||||||
|
|
||||||
|
##### writable.writableFinished
|
||||||
|
<!-- YAML
|
||||||
|
added: v12.4.0
|
||||||
|
-->
|
||||||
|
|
||||||
|
* {boolean}
|
||||||
|
|
||||||
|
Is `true` if all data has been flushed to the underlying system. After
|
||||||
|
the [`'finish'`][] event has been emitted.
|
||||||
|
|
||||||
##### writable.writableObjectMode
|
##### writable.writableObjectMode
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
added: v12.3.0
|
added: v12.3.0
|
||||||
|
@ -98,6 +98,16 @@ Object.defineProperty(Duplex.prototype, 'writableLength', {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Object.defineProperty(Duplex.prototype, 'writableFinished', {
|
||||||
|
// Making it explicit this property is not enumerable
|
||||||
|
// because otherwise some prototype manipulation in
|
||||||
|
// userland will fail
|
||||||
|
enumerable: false,
|
||||||
|
get() {
|
||||||
|
return this._writableState.finished;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// The no-half-open enforcer
|
// The no-half-open enforcer
|
||||||
function onend() {
|
function onend() {
|
||||||
// If the writable side ended, then we're ok.
|
// If the writable side ended, then we're ok.
|
||||||
|
@ -714,6 +714,16 @@ Object.defineProperty(Writable.prototype, 'writableObjectMode', {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Object.defineProperty(Writable.prototype, 'writableFinished', {
|
||||||
|
// Making it explicit this property is not enumerable
|
||||||
|
// because otherwise some prototype manipulation in
|
||||||
|
// userland will fail
|
||||||
|
enumerable: false,
|
||||||
|
get() {
|
||||||
|
return this._writableState.finished;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Writable.prototype.destroy = destroyImpl.destroy;
|
Writable.prototype.destroy = destroyImpl.destroy;
|
||||||
Writable.prototype._undestroy = destroyImpl.undestroy;
|
Writable.prototype._undestroy = destroyImpl.undestroy;
|
||||||
Writable.prototype._destroy = function(err, cb) {
|
Writable.prototype._destroy = function(err, cb) {
|
||||||
|
30
test/parallel/test-stream-duplex-writable-finished.js
Normal file
30
test/parallel/test-stream-duplex-writable-finished.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const { Duplex } = require('stream');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
// basic
|
||||||
|
{
|
||||||
|
// Find it on Duplex.prototype
|
||||||
|
assert(Duplex.prototype.hasOwnProperty('writableFinished'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// event
|
||||||
|
{
|
||||||
|
const duplex = new Duplex();
|
||||||
|
|
||||||
|
duplex._write = (chunk, encoding, cb) => {
|
||||||
|
// The state finished should start in false.
|
||||||
|
assert.strictEqual(duplex.writableFinished, false);
|
||||||
|
cb();
|
||||||
|
};
|
||||||
|
|
||||||
|
duplex.on('finish', common.mustCall(() => {
|
||||||
|
assert.strictEqual(duplex.writableFinished, true);
|
||||||
|
}));
|
||||||
|
|
||||||
|
duplex.end('testing finished state', common.mustCall(() => {
|
||||||
|
assert.strictEqual(duplex.writableFinished, true);
|
||||||
|
}));
|
||||||
|
}
|
30
test/parallel/test-stream-writable-finished.js
Normal file
30
test/parallel/test-stream-writable-finished.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const { Writable } = require('stream');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
// basic
|
||||||
|
{
|
||||||
|
// Find it on Writable.prototype
|
||||||
|
assert(Writable.prototype.hasOwnProperty('writableFinished'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// event
|
||||||
|
{
|
||||||
|
const writable = new Writable();
|
||||||
|
|
||||||
|
writable._write = (chunk, encoding, cb) => {
|
||||||
|
// The state finished should start in false.
|
||||||
|
assert.strictEqual(writable.writableFinished, false);
|
||||||
|
cb();
|
||||||
|
};
|
||||||
|
|
||||||
|
writable.on('finish', common.mustCall(() => {
|
||||||
|
assert.strictEqual(writable.writableFinished, true);
|
||||||
|
}));
|
||||||
|
|
||||||
|
writable.end('testing finished state', common.mustCall(() => {
|
||||||
|
assert.strictEqual(writable.writableFinished, true);
|
||||||
|
}));
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user