diff --git a/src/node/client.js b/src/node/client.js index 7007852b939c1be2c05ee9c06192cb2b7f57f663..a039b0dcfa6fbb12a09dd1d54cc605752a378244 100644 --- a/src/node/client.js +++ b/src/node/client.js @@ -160,6 +160,14 @@ GrpcClientStream.prototype._write = function(chunk, encoding, callback) { }, 0); }; +/** + * Cancel the ongoing call. If the call has not already finished, it will finish + * with status CANCELLED. + */ +GrpcClientStream.prototype.cancel = function() { + self._call.cancel(); +}; + /** * Make a request on the channel to the given method with the given arguments * @param {grpc.Channel} channel The channel on which to make the request diff --git a/src/node/surface_client.js b/src/node/surface_client.js index b63ae13e8dc2dbd7ce0871d106541d849e4cdcd9..f7123450c2b5c26c58ea63648b2aba8eb5a53b7f 100644 --- a/src/node/surface_client.js +++ b/src/node/surface_client.js @@ -128,6 +128,16 @@ function _write(chunk, encoding, callback) { */ ClientWritableObjectStream.prototype._write = _write; +/** + * Cancel the underlying call + */ +function cancel() { + this._stream.cancel(); +} + +ClientReadableObjectStream.prototype.cancel = cancel; +ClientWritableObjectStream.prototype.cancel = cancel; + /** * Get a function that can make unary requests to the specified method. * @param {string} method The name of the method to request @@ -155,6 +165,9 @@ function makeUnaryRequestFunction(method, serialize, deserialize) { var stream = client.makeRequest(this.channel, method, serialize, deserialize, metadata, deadline); var emitter = new EventEmitter(); + emitter.cancel = function cancel() { + stream.cancel(); + }; forwardEvent(stream, emitter, 'status'); forwardEvent(stream, emitter, 'metadata'); stream.write(argument);