【发布时间】:2016-12-01 19:19:27
【问题描述】:
我的代码包含这个简单的函数,用于将文件上传到我的 PHP 服务器(xhr 请求嵌套在 RxJS/Observable 中):
fileUpload(file: File): Observable<any> {
return new Observable( observer => {
let xhr:XMLHttpRequest = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
observer.next(<any>JSON.parse(xhr.response));
} else {
observer.error(xhr.response);
observer.complete();
}
}
};
xhr.open('POST', '__BACKEND__?action=file-upload', true);
var formData = new FormData();
formData.append('file', file, file.name);
xhr.send(formData);
});
}
它功能齐全,但现在我还想为其添加某种取消机制。
仅仅取消订阅 Observable 是行不通的,因为我需要以某种方式调用 xhr.abort(),否则我会浪费宝贵的资源进行大量上传。
是否有可能通过修改此代码来获得一个优雅的解决方案,还是我做错了,因为我为此任务使用了RxJS/Observable?
【问题讨论】:
标签: javascript ajax typescript rxjs observable