5
5
*/
6
6
7
7
const EventEmitter = require ( 'events' ) . EventEmitter ;
8
+ const MongooseError = require ( '../error/mongooseError' ) ;
8
9
9
10
/*!
10
11
* ignore
@@ -25,6 +26,7 @@ class ChangeStream extends EventEmitter {
25
26
this . bindedEvents = false ;
26
27
this . pipeline = pipeline ;
27
28
this . options = options ;
29
+ this . errored = false ;
28
30
29
31
if ( options && options . hydrate && ! options . model ) {
30
32
throw new Error (
@@ -39,6 +41,7 @@ class ChangeStream extends EventEmitter {
39
41
try {
40
42
changeStreamThunk ( ( err , driverChangeStream ) => {
41
43
if ( err != null ) {
44
+ this . errored = true ;
42
45
this . emit ( 'error' , err ) ;
43
46
return reject ( err ) ;
44
47
}
@@ -49,6 +52,7 @@ class ChangeStream extends EventEmitter {
49
52
} ) ;
50
53
} catch ( err ) {
51
54
syncError = err ;
55
+ this . errored = true ;
52
56
this . emit ( 'error' , err ) ;
53
57
reject ( err ) ;
54
58
}
@@ -107,10 +111,16 @@ class ChangeStream extends EventEmitter {
107
111
}
108
112
109
113
hasNext ( cb ) {
114
+ if ( this . errored ) {
115
+ throw new MongooseError ( 'Cannot call hasNext() on errored ChangeStream' ) ;
116
+ }
110
117
return this . driverChangeStream . hasNext ( cb ) ;
111
118
}
112
119
113
120
next ( cb ) {
121
+ if ( this . errored ) {
122
+ throw new MongooseError ( 'Cannot call next() on errored ChangeStream' ) ;
123
+ }
114
124
if ( this . options && this . options . hydrate ) {
115
125
if ( cb != null ) {
116
126
const originalCb = cb ;
@@ -141,16 +151,25 @@ class ChangeStream extends EventEmitter {
141
151
}
142
152
143
153
addListener ( event , handler ) {
154
+ if ( this . errored ) {
155
+ throw new MongooseError ( 'Cannot call addListener() on errored ChangeStream' ) ;
156
+ }
144
157
this . _bindEvents ( ) ;
145
158
return super . addListener ( event , handler ) ;
146
159
}
147
160
148
161
on ( event , handler ) {
162
+ if ( this . errored ) {
163
+ throw new MongooseError ( 'Cannot call on() on errored ChangeStream' ) ;
164
+ }
149
165
this . _bindEvents ( ) ;
150
166
return super . on ( event , handler ) ;
151
167
}
152
168
153
169
once ( event , handler ) {
170
+ if ( this . errored ) {
171
+ throw new MongooseError ( 'Cannot call once() on errored ChangeStream' ) ;
172
+ }
154
173
this . _bindEvents ( ) ;
155
174
return super . once ( event , handler ) ;
156
175
}
0 commit comments