javascript - XMLHttpRequest 没有停止

标签 javascript angular typescript xmlhttprequest angular6

我有一个 XHR 来上传文件。用户可以单击按钮取消上传。

然后将 file.canceled 设置为 true。我正在 onprogress 事件中检查上传是否已被取消。

如果它被取消,我会调用xhr.DONE。但是,这根本不会停止上传过程。

代码(我使用的是 Angular 6,所以它是 Typescript)

upload(f: ProductFile): Observable<ProductFile> {
    var file: ProductFile;
    this.store$.pipe(
        select(FilesSelectors.getFileById(f._id)),
    ).subscribe((file: ProductFile) => file = file)
    return new Observable((observer) => {
        let xhr = new XMLHttpRequest();
        let progress: number = 0;
        xhr.upload.onprogress = (event: ProgressEvent) => {
            if (event.lengthComputable) {
                progress = 100 * (event.loaded / event.total);
                this.store$.dispatch(new FilesActions.UploadProgress({
                    ...file, progress, uploaded: false, uploading: true,
                }));
            }
            if (file.canceled) {
                observer.error('canceled')
                observer.complete();
                xhr.DONE;
            }
        }
        xhr.responseType = 'json';
        xhr.open('POST', `${this.httpService.url}/files/upload`, true);
        xhr.setRequestHeader('Authorization', this.httpService.token);
        xhr.send(f.formData);
        xhr.onload = () => {
            const finishedFile: ProductFile = {
                ...f,
                url: xhr.response,
                uploaded: true,
                uploading: false,
                progress: 100,
            };
            observer.next(finishedFile);
            observer.complete();
            xhr.DONE;
        }
    });
}

所以我的目标是当file.canceled等于true时中止上传过程

最佳答案

尝试使用 XMLHttpRequest 对象的 abort() 方法而不是 DONE。

像这样:

xhr.abort();

关于javascript - XMLHttpRequest 没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691401/

相关文章:

javascript - 如何在json中给出本地文件的url路径

javascript - 没有 Node 的 Require.js 优化?

带有标志和国家代码的 Angular 2 下拉菜单

javascript - MongoDB - 错误 : Cannot find module '../build/Release/bson'

javascript - 字符串化一个对象然后将其解析回其原始对象?

java - Spring 应用程序的 SSE 响应未到达客户端

javascript - Angular 2 - 'imports' 不存在于类型 'ComponentMetadataType' 中

reactjs - 错误: Object has been destroyed when trying to re-open a second BrowserWindow - Electron. js

javascript - 解决绝对导入冲突

javascript - vuex : $store. commit vs 直接调用函数