Skip to content
Permalink
Browse files

http: add response.writableFinished

response.writableFinished is true if all data has been flushed to the
underlying system.

PR-URL: #28681
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
  • Loading branch information...
ronag authored and targos committed Jul 14, 2019
1 parent caee910 commit 06d0abea0d7ef0a83e0171d5846fd7d597bc83fa
Showing with 50 additions and 0 deletions.
  1. +9 −0 doc/api/http.md
  2. +9 −0 lib/_http_outgoing.js
  3. +32 −0 test/parallel/test-http-outgoing-writableFinished.js
@@ -1464,6 +1464,15 @@ Returns `true` if the entire data was flushed successfully to the kernel
buffer. Returns `false` if all or part of the data was queued in user memory.
`'drain'` will be emitted when the buffer is free again.

### response.writableFinished
<!-- YAML
added: REPLACEME
-->

* {boolean}

Is `true` if all data has been flushed to the underlying system.

### response.writeContinue()
<!-- YAML
added: v0.3.0
@@ -109,6 +109,15 @@ function OutgoingMessage() {
Object.setPrototypeOf(OutgoingMessage.prototype, Stream.prototype);
Object.setPrototypeOf(OutgoingMessage, Stream);

Object.defineProperty(OutgoingMessage.prototype, 'writableFinished', {
get: function() {
return (
this.finished &&
this.outputSize === 0 &&
(!this.socket || this.socket.writableLength === 0)
);
}
});

Object.defineProperty(OutgoingMessage.prototype, '_headers', {
get: internalUtil.deprecate(function() {
@@ -0,0 +1,32 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const http = require('http');

const server = http.createServer(common.mustCall(function(req, res) {
assert.strictEqual(res.writableFinished, false);
res
.on('finish', common.mustCall(() => {
assert.strictEqual(res.writableFinished, true);
server.close();
}))
.end();
}));

server.listen(0);

server.on('listening', common.mustCall(function() {
const clientRequest = http.request({
port: server.address().port,
method: 'GET',
path: '/'
});

assert.strictEqual(clientRequest.writableFinished, false);
clientRequest
.on('finish', common.mustCall(() => {
assert.strictEqual(clientRequest.writableFinished, true);
}))
.end();
assert.strictEqual(clientRequest.writableFinished, false);
}));

0 comments on commit 06d0abe

Please sign in to comment.
You can’t perform that action at this time.