@@ -35,6 +35,7 @@ const NO_OP_OBSERVER = {
35
35
onCompleted : NO_OP ,
36
36
onError : NO_OP
37
37
}
38
+ let requestHandlerNextId = 0
38
39
39
40
/**
40
41
* Treat the protocol responses and notify the observers
@@ -73,6 +74,8 @@ export default class ResponseHandler {
73
74
* @param {ResponseHandler~Observer } observer Object which will be notified about errors
74
75
*/
75
76
constructor ( { transformMetadata, log, observer } = { } ) {
77
+ this . _lastUpdateCurrentObserverCall = { }
78
+ this . _lastQueueObserverCall = { }
76
79
this . _pendingObservers = [ ]
77
80
this . _log = log
78
81
this . _transformMetadata = transformMetadata || NO_OP_IDENTITY
@@ -84,6 +87,7 @@ export default class ResponseHandler {
84
87
} ,
85
88
observer
86
89
)
90
+ this . _requestHandlerId = requestHandlerNextId ++
87
91
}
88
92
89
93
handleResponse ( msg ) {
@@ -102,6 +106,13 @@ export default class ResponseHandler {
102
106
}
103
107
try {
104
108
const metadata = this . _transformMetadata ( payload )
109
+ if ( ! this . _currentObserver ) {
110
+ this . _log . trace (
111
+ `${ this . _requestHandlerId } .handleResponse(SUCCESS) current observer is undefined` ,
112
+ this . _lastQueueObserverCall ,
113
+ this . _lastUpdateCurrentObserverCall
114
+ )
115
+ }
105
116
this . _currentObserver . onCompleted ( metadata )
106
117
} finally {
107
118
this . _updateCurrentObserver ( )
@@ -151,23 +162,41 @@ export default class ResponseHandler {
151
162
* @protected
152
163
*/
153
164
_updateCurrentObserver ( ) {
165
+ const previousObserver = this . _currentObserver
154
166
this . _currentObserver = this . _pendingObservers . shift ( )
167
+ this . _lastUpdateCurrentObserverCall = {
168
+ previousObserver,
169
+ currentObserver : this . _currentObserver ,
170
+ stacktrace : new Error ( ) . stack
171
+ }
155
172
}
156
173
157
174
_queueObserver ( observer ) {
158
175
observer = observer || NO_OP_OBSERVER
159
176
observer . onCompleted = observer . onCompleted || NO_OP
160
177
observer . onError = observer . onError || NO_OP
161
178
observer . onNext = observer . onNext || NO_OP
179
+ const previousObserver = this . _currentObserver
162
180
if ( this . _currentObserver === undefined ) {
163
181
this . _currentObserver = observer
164
182
} else {
165
183
this . _pendingObservers . push ( observer )
166
184
}
185
+ this . _lastQueueObserverCall = {
186
+ previousObserver,
187
+ observer,
188
+ currentObserver : this . _currentObserver ,
189
+ stacktrace : new Error ( ) . stack
190
+ }
167
191
return true
168
192
}
169
193
170
194
_notifyErrorToObservers ( error ) {
195
+ console . trace (
196
+ `${ this . _requestHandlerId } ._notifyErrorToObservers, this._currentObserver=` ,
197
+ this . _currentObserver ,
198
+ error
199
+ )
171
200
if ( this . _currentObserver && this . _currentObserver . onError ) {
172
201
this . _currentObserver . onError ( error )
173
202
}
0 commit comments