From 6634dee5f3a506ad4779ecce251592886626274f Mon Sep 17 00:00:00 2001 From: Nicolas Dextraze Date: Fri, 30 Jun 2017 18:54:25 -0700 Subject: [PATCH] Fix unhandled rejection issue with connectToPersistentSubscription #44 --- src/eventStoreNodeConnection.js | 8 +++----- src/eventStorePersistentSubscriptionBase.js | 4 +++- test/persistentSubscription_test.js | 18 +++++++++++------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/eventStoreNodeConnection.js b/src/eventStoreNodeConnection.js index d2fedc6..ac8fce6 100644 --- a/src/eventStoreNodeConnection.js +++ b/src/eventStoreNodeConnection.js @@ -519,7 +519,7 @@ EventStoreNodeConnection.prototype.subscribeToAllFrom = function( * @param {UserCredentials} [userCredentials] * @param {number} [bufferSize] * @param {boolean} [autoAck] - * @return {EventStorePersistentSubscription} + * @return {Promise} */ EventStoreNodeConnection.prototype.connectToPersistentSubscription = function( stream, groupName, eventAppeared, subscriptionDropped, userCredentials, bufferSize, autoAck @@ -536,9 +536,7 @@ EventStoreNodeConnection.prototype.connectToPersistentSubscription = function( var subscription = new EventStorePersistentSubscription( groupName, stream, eventAppeared, subscriptionDropped, userCredentials, this._settings.log, this._settings.verboseLogging, this._settings, this._handler, bufferSize, autoAck); - subscription.start(); - - return subscription; + return subscription.start(); }; /** @@ -571,7 +569,7 @@ EventStoreNodeConnection.prototype.createPersistentSubscription = function(strea * @public * @param {string} stream * @param {string} groupName - * @param {string} settings + * @param {PersistentSubscriptionSettings} settings * @param {UserCredentials} [userCredentials] * @returns {Promise.} */ diff --git a/src/eventStorePersistentSubscriptionBase.js b/src/eventStorePersistentSubscriptionBase.js index eb3d0e0..999f877 100644 --- a/src/eventStorePersistentSubscriptionBase.js +++ b/src/eventStorePersistentSubscriptionBase.js @@ -35,11 +35,12 @@ EventStorePersistentSubscriptionBase.prototype.start = function() { this._stopped = false; var self = this; - this._startSubscription(this._subscriptionId, this._streamId, this._bufferSize, this._userCredentials, + return this._startSubscription(this._subscriptionId, this._streamId, this._bufferSize, this._userCredentials, this._onEventAppeared.bind(this), this._onSubscriptionDropped.bind(this), this._settings) .then(function(subscription) { console.log('Subscription started.'); self._subscription = subscription; + return self; }); }; @@ -78,6 +79,7 @@ EventStorePersistentSubscriptionBase.prototype.fail = function(events, action, r this._subscription.notifyEventsFailed(ids, action, reason); }; +//TODO: this should return a promise EventStorePersistentSubscriptionBase.prototype.stop = function() { if (this._verbose) this._log.debug("Persistent Subscription to %s: requesting stop...", this._streamId); this._enqueueSubscriptionDropNotification(SubscriptionDropReason.UserInitiated, null); diff --git a/test/persistentSubscription_test.js b/test/persistentSubscription_test.js index 7e47b6f..85c219e 100644 --- a/test/persistentSubscription_test.js +++ b/test/persistentSubscription_test.js @@ -22,7 +22,7 @@ module.exports = { }, //TODO: Update Persistent Subscription 'Test ConnectTo Persistent Subscription': function(test) { - test.expect(2); + test.expect(3); var _doneCount = 0; function done(err) { test.ok(!err, err ? err.stack : ''); @@ -36,12 +36,16 @@ module.exports = { function subscriptionDropped(connection, reason, error) { done(error); } - var subscription = this.conn.connectToPersistentSubscription(testStreamName, 'consumer-1', eventAppeared, subscriptionDropped); - this.conn.appendToStream(testStreamName, client.expectedVersion.any, [createRandomEvent()]) - .then(function () { - done(); - }) - .catch(done); + var self = this; + this.conn.connectToPersistentSubscription(testStreamName, 'consumer-1', eventAppeared, subscriptionDropped) + .then(function(subscription) { + test.ok(subscription, "Subscription is null."); + return self.conn.appendToStream(testStreamName, client.expectedVersion.any, [createRandomEvent()]); + }) + .then(function () { + done(); + }) + .catch(done); }, 'Test Delete Persistent Subscription': function(test) { this.conn.deletePersistentSubscription(testStreamName, 'consumer-1', adminCredentials)