Как переписать xhrbackend (xhrconection) на httpxhrbackend или httpinterceptor

У меня возникли проблемы с переключением с XHRBackend и XHRConnection (Angular 4.3) на Angular 11. Не совсем понятно каким образом нужно использовать HttpInterceptor и/или HttpXhrBackend в данном случае.

custom.http.ts

 export class CustomXHRBackend extends XHRBackend {  
           constructor(private browserXHR: BrowserXhr,       
              private baseResponseOptions: ResponseOptions, private xsrfStrategy: XSRFStrategy, private eventsService: EventsService) {        
                 super(browserXHR, baseResponseOptions, xsrfStrategy);   
           }   
           createConnection(request: Request) {        
              this.xsrfStrategy.configureRequest(request);        
              let conn = new CustomXHRConnection(request, this.browserXHR, this.baseResponseOptions, this.eventsService);       
              return conn;   
           }
        }
    
    
    @Injectable()
    export class CustomXHRConnection extends XHRConnection {
        // ... get response url                
        
        setDetectedContentType(req, _xhr) {
            super.setDetectedContentType(req, _xhr);
        }
        //--only for _xhr.upload.onprogress
        constructor(req: Request, browserXHR: BrowserXhr, baseResponseOptions: ResponseOptions, private eventsService: EventsService) {
            super(req, browserXHR, baseResponseOptions);
            let _setDetectedContentType = super.setDetectedContentType;
            let _self = this;
            this.response = new Observable(function (responseObserver) {
                var _xhr = browserXHR.build();
               
                // ... _xhr.open(...)
                var onLoad = function () {
                    // ... some operations
                    response.ok = (status >= 200 && status < 300);
                    if (response.ok) {
                        responseObserver.next(<any>response);
                        responseObserver.complete();
                        return;
                    }
                    responseObserver.error(response);
                };
                // error event handler
                var onError = function (err) {
                     // ... some operations
                }
                responseObserver.error(new Response(responseOptions));
                };
                _setDetectedContentType(req, _xhr);
                // ... set _xhr.headers and _xhr_type
                _xhr.addEventListener('load', onLoad);
                _xhr.addEventListener('error', onError);                   
                _xhr.send(req.getBody());
    
                return function() {
                    _xhr.removeEventListener('load', onLoad);
                    _xhr.removeEventListener('error', onError);
                    _xhr.abort();
                };
            });
        }   
    }

Далее подключение XhrBackend в app.module

app.module.ts

export function _customXHRBackend(browserXHR: BrowserXhr, baseResponseOptions: ResponseOptions, xsrfStrategy: XSRFStrategy, eventsService: EventsService): XHRBackend {
        return new CustomXHRBackend(browserXHR, baseResponseOptions, xsrfStrategy, eventsService);
    };


@NgModule({
    imports: [],

    providers: [
        {
            provide: XHRBackend,
            useFactory: _customXHRBackend, 
            deps: [BrowserXhr, ResponseOptions, XSRFStrategy, EventsService]
        },     
    ],
   
    bootstrap: [MainApp]
})
export class AppModule {
}

Ответы (0 шт):