@@ -35,6 +35,7 @@ const NO_OP_OBSERVER = {
3535 onCompleted : NO_OP ,
3636 onError : NO_OP
3737}
38+ let requestHandlerNextId = 0
3839
3940/**
4041 * Treat the protocol responses and notify the observers
@@ -73,6 +74,8 @@ export default class ResponseHandler {
7374 * @param {ResponseHandler~Observer } observer Object which will be notified about errors
7475 */
7576 constructor ( { transformMetadata, log, observer } = { } ) {
77+ this . _lastUpdateCurrentObserverCall = { }
78+ this . _lastQueueObserverCall = { }
7679 this . _pendingObservers = [ ]
7780 this . _log = log
7881 this . _transformMetadata = transformMetadata || NO_OP_IDENTITY
@@ -84,6 +87,7 @@ export default class ResponseHandler {
8487 } ,
8588 observer
8689 )
90+ this . _requestHandlerId = requestHandlerNextId ++
8791 }
8892
8993 handleResponse ( msg ) {
@@ -102,6 +106,13 @@ export default class ResponseHandler {
102106 }
103107 try {
104108 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+ }
105116 this . _currentObserver . onCompleted ( metadata )
106117 } finally {
107118 this . _updateCurrentObserver ( )
@@ -151,23 +162,41 @@ export default class ResponseHandler {
151162 * @protected
152163 */
153164 _updateCurrentObserver ( ) {
165+ const previousObserver = this . _currentObserver
154166 this . _currentObserver = this . _pendingObservers . shift ( )
167+ this . _lastUpdateCurrentObserverCall = {
168+ previousObserver,
169+ currentObserver : this . _currentObserver ,
170+ stacktrace : new Error ( ) . stack
171+ }
155172 }
156173
157174 _queueObserver ( observer ) {
158175 observer = observer || NO_OP_OBSERVER
159176 observer . onCompleted = observer . onCompleted || NO_OP
160177 observer . onError = observer . onError || NO_OP
161178 observer . onNext = observer . onNext || NO_OP
179+ const previousObserver = this . _currentObserver
162180 if ( this . _currentObserver === undefined ) {
163181 this . _currentObserver = observer
164182 } else {
165183 this . _pendingObservers . push ( observer )
166184 }
185+ this . _lastQueueObserverCall = {
186+ previousObserver,
187+ observer,
188+ currentObserver : this . _currentObserver ,
189+ stacktrace : new Error ( ) . stack
190+ }
167191 return true
168192 }
169193
170194 _notifyErrorToObservers ( error ) {
195+ console . trace (
196+ `${ this . _requestHandlerId } ._notifyErrorToObservers, this._currentObserver=` ,
197+ this . _currentObserver ,
198+ error
199+ )
171200 if ( this . _currentObserver && this . _currentObserver . onError ) {
172201 this . _currentObserver . onError ( error )
173202 }
0 commit comments