@@ -105,12 +105,13 @@ export class HttpClient {
105105 if ( Response . prototype . isPrototypeOf ( result ) ) {
106106 response = result ;
107107 } else if ( Request . prototype . isPrototypeOf ( result ) ) {
108+ request = Promise . resolve ( result ) ;
108109 response = fetch ( result ) ;
109110 } else {
110111 throw new Error ( `An invalid result was returned by the interceptor chain. Expected a Request or Response instance, but got [${ result } ]` ) ;
111112 }
112113
113- return processResponse ( response , this . interceptors ) ;
114+ return request . then ( _request => processResponse ( response , this . interceptors , _request ) ) ;
114115 } ) ;
115116
116117 return this ::trackRequestEndWith ( promise ) ;
@@ -191,18 +192,18 @@ function processRequest(request, interceptors) {
191192 return applyInterceptors ( request , interceptors , 'request' , 'requestError' ) ;
192193}
193194
194- function processResponse ( response , interceptors ) {
195- return applyInterceptors ( response , interceptors , 'response' , 'responseError' ) ;
195+ function processResponse ( response , interceptors , request ) {
196+ return applyInterceptors ( response , interceptors , 'response' , 'responseError' , request ) ;
196197}
197198
198- function applyInterceptors ( input , interceptors , successName , errorName ) {
199+ function applyInterceptors ( input , interceptors , successName , errorName , ... interceptorArgs ) {
199200 return ( interceptors || [ ] )
200201 . reduce ( ( chain , interceptor ) => {
201202 let successHandler = interceptor [ successName ] ;
202203 let errorHandler = interceptor [ errorName ] ;
203204
204205 return chain . then (
205- successHandler && interceptor ::successHandler ,
206- errorHandler && interceptor ::errorHandler ) ;
206+ successHandler && ( value => interceptor ::successHandler ( value , ... interceptorArgs ) ) ,
207+ errorHandler && ( reason => interceptor ::errorHandler ( reason , ... interceptorArgs ) ) ) ;
207208 } , Promise . resolve ( input ) ) ;
208209}
0 commit comments