У меня есть следующий код angular / rxjs, который использует объект xhr
для загрузки файла
async download(fileToUpload: UploadedFileMetaData): Promise<Observable<DownloadEvent>> {
const url = await this.getDownloadUrl(fileToUpload);
let xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
return Observable.create((observer) => {
xhr.open('GET', url);
xhr.send();
xhr.addEventListener('progress', (progress) => {
// handle progress
});
xhr.addEventListener('load', (e: ProgressEvent & { target: { response: Blob } }) => {
if (e.target['status'] !== 200) {
observer.error({ state: DownloadState.failure, error: e.target });
} else {
observer.next({ state: DownloadState.success, response: e.target.response });
observer.complete();
}
});
xhr.addEventListener('error', (err) => {
console.log('upload error', err);
observer.error({ state: DownloadState.failure, error: err.message });
});
xhr.addEventListener('abort', (abort) => {
console.log('upload abort', abort);
observer.error({ state: DownloadState.failure, error: 'Transfer aborted by the user' });
});
return () => xhr.abort();
});
Запросы отправляются в хранилище BLOB-объектов Azure, и иногда я получаю ошибку net::ERR_TIMED_OUT
.
Но возникновение этой ошибки не вызывает какой-либо из обработчиков, которые я в настоящее время назначил объекту xhr
.
Как я могу поймать и обработать это