XMLHttpRequest Вызов прослушивателя событий прогресса при прерывании - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть простой сервис загрузки файлов 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 изслушатели по какой-то причине.Что будет вызывать оповещение, которое будет вызвано прерыванием в этом коде?

...