diff --git a/README.md b/README.md index 7e3215f..f6fb727 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ - [Server Stream Request](#server-stream-request) - [Bidirectional Stream Request](#bidirectional-stream-request) - [Request with Metadata](#request-with-metadata) + - [Using Deadline](#using-deadline) - [Promisify single function](#promisify-single-function) - [MIT License](#mit-license) @@ -489,6 +490,15 @@ function main() { main(); ``` +### Using Deadline + +The deadline parameter is used to to set a timestamp in millisenconds for the entire call to complete: + +```js +// We give a deadline of 1 second (= 1000ms) +grpc_promise.promisifyAll(client, deadline: Date.now() + 1000); +``` + ### Promisify single function Client side: diff --git a/examples/client-bidi-stream.js b/examples/client-bidi-stream.js index 51a75c0..5c1d070 100644 --- a/examples/client-bidi-stream.js +++ b/examples/client-bidi-stream.js @@ -22,7 +22,8 @@ function main() { const meta = new grpc.Metadata(); meta.add('key', 'value'); - grpc_promise.promisifyAll(client, {timeout: 100, metadata: meta}); // Optional timeout definition, defaults = 50 + // Optional timeout definition, defaults = 50 + grpc_promise.promisifyAll(client, { timeout: 100, metadata: meta, deadline: Date.now() + 1000 }); let t = client.testStreamStream(); t.sendMessage({}) diff --git a/examples/client-client-stream.js b/examples/client-client-stream.js index 2725bbb..0814a0e 100644 --- a/examples/client-client-stream.js +++ b/examples/client-client-stream.js @@ -22,7 +22,7 @@ function main() { const meta = new grpc.Metadata(); meta.add('key', 'value'); - grpc_promise.promisifyAll(client, {metadata: meta}); + grpc_promise.promisifyAll(client, { metadata: meta, deadline: Date.now() + 1000 }); client.testStreamSimple(meta) .sendMessage({id: 1}) diff --git a/examples/client-promisify-only-one.js b/examples/client-promisify-only-one.js index 7330845..65dbde1 100644 --- a/examples/client-promisify-only-one.js +++ b/examples/client-promisify-only-one.js @@ -1,6 +1,20 @@ const grpc = require('grpc'); +const protoLoader = require('@grpc/proto-loader'); const grpc_promise = require('../lib/index'); // require('grpc-promise') -const test_proto = grpc.load(__dirname + '/protobuf/test.proto').test; + +const packageDefinition = protoLoader.loadSync( + __dirname + '/protobuf/test.proto', + { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true + } +); + +const protoDescriptor = grpc.loadPackageDefinition(packageDefinition); +const test_proto = protoDescriptor.test; function main() { const client = new test_proto.Test('localhost:50052', grpc.credentials.createInsecure()); @@ -8,7 +22,7 @@ function main() { const meta = new grpc.Metadata(); meta.add('key', 'value'); - grpc_promise.promisify(client, ['testSimpleSimple'], {metadata: meta}); + grpc_promise.promisify(client, ['testSimpleSimple'], { metadata: meta, deadline: Date.now() + 1000 }); client.testSimpleSimple() .sendMessage({id: 1}) diff --git a/examples/client-server-stream.js b/examples/client-server-stream.js index 275c626..04e3bad 100644 --- a/examples/client-server-stream.js +++ b/examples/client-server-stream.js @@ -22,7 +22,7 @@ function main() { const meta = new grpc.Metadata(); meta.add('key', 'value'); - grpc_promise.promisifyAll(client, {metadata: meta}); + grpc_promise.promisifyAll(client, { metadata: meta, deadline: Date.now() + 1000 }); client.testSimpleStream() .sendMessage({id: 1}) diff --git a/examples/client-unary.js b/examples/client-unary.js index 9286ec3..5cd8b45 100644 --- a/examples/client-unary.js +++ b/examples/client-unary.js @@ -22,7 +22,7 @@ function main() { const meta = new grpc.Metadata(); meta.add('key', 'value'); - grpc_promise.promisifyAll(client, {metadata: meta}); + grpc_promise.promisifyAll(client, { metadata: meta, deadline: Date.now() + 1000 }); client.testSimpleSimple() .sendMessage({id: 1}) diff --git a/lib/request-types/bidi-stream-request.js b/lib/request-types/bidi-stream-request.js index 3f4db73..536817d 100644 --- a/lib/request-types/bidi-stream-request.js +++ b/lib/request-types/bidi-stream-request.js @@ -10,7 +10,7 @@ class BidiStreamRequest { this.queue = {}; this.correlationId = 0; this.timeout = options.timeout || 50; - this.stream = original_function.call(client, options.metadata); + this.stream = original_function.call(client, options.metadata, { deadline: options.deadline }); this.stream.on('error', () => {}); this.stream.on('data', data => { diff --git a/lib/request-types/client-stream-request.js b/lib/request-types/client-stream-request.js index 3aa042a..503de28 100644 --- a/lib/request-types/client-stream-request.js +++ b/lib/request-types/client-stream-request.js @@ -4,7 +4,7 @@ class ClientStreamRequest { constructor (client, original_function, options = {}) { if (options == null) options = {}; this.promise = new Promise((resolve, reject) => { - this.stream = original_function.call(client, options.metadata, function (error, response) { + this.stream = original_function.call(client, options.metadata, { deadline: options.deadline }, function (error, response) { if (error) { reject(error); } else { diff --git a/lib/request-types/server-stream-request.js b/lib/request-types/server-stream-request.js index bbdf311..dff254b 100644 --- a/lib/request-types/server-stream-request.js +++ b/lib/request-types/server-stream-request.js @@ -6,12 +6,13 @@ class ServerStreamRequest { this.queue = []; this.client = client; this.metadata = options.metadata; + this.deadline = options.deadline || undefined; this.original_function = original_function; } sendMessage (content = {}) { return new Promise((resolve, reject) => { - this.stream = this.original_function.call(this.client, content, this.metadata); + this.stream = this.original_function.call(this.client, content, this.metadata, { deadline: this.deadline }); this.stream.on('error', error => { reject(error); }); diff --git a/lib/request-types/unary-request.js b/lib/request-types/unary-request.js index 5610cdd..b787827 100644 --- a/lib/request-types/unary-request.js +++ b/lib/request-types/unary-request.js @@ -5,24 +5,28 @@ class UnaryRequest { if (options == null) options = {}; this.client = client; this.metadata = options.metadata; + this.deadline = options.deadline || undefined; this.original_function = original_function; } sendMessage (content = {}) { return new Promise((resolve, reject) => { - this.original_function.call(this.client, content, this.metadata, function (error, response) { - if (error) { - reject(error); - } else { - resolve(response); + this.original_function.call(this.client, content, this.metadata, { deadline: this.deadline }, + function (error, response) { + if (error) { + reject(error); + } else { + resolve(response); + } } - }); + ); }); } } const makeUnaryRequest = function (client, originalFunction, options) { + // console.log(options); return function () { return new UnaryRequest(client, originalFunction, options); }; diff --git a/package.json b/package.json index f8acdf7..2fb351b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grpc-promise", - "version": "1.3.0", + "version": "1.3.1", "description": "GRPC promisify module for all Request/Response types: standard and stream", "main": "lib/index.js", "scripts": { diff --git a/test/lib/request-types/client-stream-request.js b/test/lib/request-types/client-stream-request.js index cc47d75..a616d2c 100644 --- a/test/lib/request-types/client-stream-request.js +++ b/test/lib/request-types/client-stream-request.js @@ -7,7 +7,7 @@ describe('Client Stream Request', function () { it('Test ok', function () { const client = {}; - const makeClientStreamRequest = function (metadata, callback) { + const makeClientStreamRequest = function (metadata, options, callback) { return new ClientStreamMock({callback: callback}); }; makeClientStreamRequest.requestStream = true; @@ -29,7 +29,7 @@ describe('Client Stream Request', function () { it('Test ko', function () { const client = {}; - const makeClientStreamRequest = function (metadata, callback) { + const makeClientStreamRequest = function (metadata, options, callback) { var stream = new ClientStreamMock(); stream.on('finish', function () { callback('some_error'); @@ -60,7 +60,7 @@ describe('Client Stream Request', function () { it('Test ok', function (done) { const client = {}; - const makeClientStreamRequest = function (metadata, callback) { + const makeClientStreamRequest = function (metadata, options, callback) { return new ClientStreamMock({callback: callback}); }; makeClientStreamRequest.requestStream = true; diff --git a/test/lib/request-types/unary-request.js b/test/lib/request-types/unary-request.js index 57be8ef..8dd33d7 100644 --- a/test/lib/request-types/unary-request.js +++ b/test/lib/request-types/unary-request.js @@ -6,7 +6,7 @@ describe('Unary Request', function () { it('Test ok', function () { const client = {}; - const makeUnaryRequest = function (request, metadata, callback) { + const makeUnaryRequest = function (request, metadata, options, callback) { callback(null, request); }; makeUnaryRequest.requestStream = false; @@ -24,7 +24,7 @@ describe('Unary Request', function () { it('Test ko', function () { const client = {}; - const makeUnaryRequest = function (request, metadata, callback) { + const makeUnaryRequest = function (request, metadata, options, callback) { callback('timeout'); }; makeUnaryRequest.requestStream = false; @@ -48,7 +48,7 @@ describe('Unary Request', function () { it('Test ok', function () { const client = {}; - const makeUnaryRequest = function (request, metadata, callback) { + const makeUnaryRequest = function (request, metadata, options, callback) { callback(null, request); }; makeUnaryRequest.requestStream = false;