У меня есть простой сервис загрузки файлов angularjs, который отправляет новый запрос XMLHttpRequest на S3.У меня есть кнопка x в контроллере, которая вызывает сервисный метод, который прерывает эту загрузку, если она существует.
У меня было это раньше, но по какой-то причине оно перестало работать до точки, где он вызываетмой обработчик прогресса и обработчик прерывания.Что может быть причиной этого?
public uploadFile(file: File): ng.IPromise<{}> {
this.deferred = this.$q.defer();
const formData = new FormData();
...
formData.append("file", file);
const abortUpload = () => this.deferred.reject('canceled');
this.xhr = new XMLHttpRequest();
this.xhr.upload.addEventListener("progress", this.deferred.notify, false);
this.xhr.addEventListener("load", this.deferred.resolve, false);
this.xhr.addEventListener("error", this.deferred.reject, false);
this.xhr.addEventListener("abort", abortUpload, false);
this.xhr.open('POST', HOSTS.S3_UPLOAD, true);
this.xhr.setRequestHeader('Accept', '*/*');
this.xhr.send(formData);
return this.deferred.promise;
}
public cancelUploadFile(): void {
if (this.xhr) {
this.xhr.abort();
}
}
Проблема в том, что у меня есть это в контроллере
this.uploadFile(someFile).then(
() => uploadSuccess(...),
(err) => uploadError(...),
() => uploadProgress(...)
).then(<more chained promise code>);
, и uploadProgress вызывается, потому что xhr.abort()
вызывает deferred.notify
изслушатели по какой-то причине.Что будет вызывать оповещение, которое будет вызвано прерыванием в этом коде?