Skip to content

Commit 9fa956f

Browse files
committed
throw error if calling methods on change stream that errored out
1 parent 8667bdb commit 9fa956f

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

lib/cursor/changeStream.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
const EventEmitter = require('events').EventEmitter;
8+
const MongooseError = require('../error/mongooseError');
89

910
/*!
1011
* ignore
@@ -25,6 +26,7 @@ class ChangeStream extends EventEmitter {
2526
this.bindedEvents = false;
2627
this.pipeline = pipeline;
2728
this.options = options;
29+
this.errored = false;
2830

2931
if (options && options.hydrate && !options.model) {
3032
throw new Error(
@@ -39,6 +41,7 @@ class ChangeStream extends EventEmitter {
3941
try {
4042
changeStreamThunk((err, driverChangeStream) => {
4143
if (err != null) {
44+
this.errored = true;
4245
this.emit('error', err);
4346
return reject(err);
4447
}
@@ -49,6 +52,7 @@ class ChangeStream extends EventEmitter {
4952
});
5053
} catch (err) {
5154
syncError = err;
55+
this.errored = true;
5256
this.emit('error', err);
5357
reject(err);
5458
}
@@ -107,10 +111,16 @@ class ChangeStream extends EventEmitter {
107111
}
108112

109113
hasNext(cb) {
114+
if (this.errored) {
115+
throw new MongooseError('Cannot call hasNext() on errored ChangeStream');
116+
}
110117
return this.driverChangeStream.hasNext(cb);
111118
}
112119

113120
next(cb) {
121+
if (this.errored) {
122+
throw new MongooseError('Cannot call next() on errored ChangeStream');
123+
}
114124
if (this.options && this.options.hydrate) {
115125
if (cb != null) {
116126
const originalCb = cb;
@@ -141,16 +151,25 @@ class ChangeStream extends EventEmitter {
141151
}
142152

143153
addListener(event, handler) {
154+
if (this.errored) {
155+
throw new MongooseError('Cannot call addListener() on errored ChangeStream');
156+
}
144157
this._bindEvents();
145158
return super.addListener(event, handler);
146159
}
147160

148161
on(event, handler) {
162+
if (this.errored) {
163+
throw new MongooseError('Cannot call on() on errored ChangeStream');
164+
}
149165
this._bindEvents();
150166
return super.on(event, handler);
151167
}
152168

153169
once(event, handler) {
170+
if (this.errored) {
171+
throw new MongooseError('Cannot call once() on errored ChangeStream');
172+
}
154173
this._bindEvents();
155174
return super.once(event, handler);
156175
}

0 commit comments

Comments
 (0)