rxjs observable ajax,如何从Observable中止Ajax请求?

  • Post author:
  • Post category:其他

我的代码包含了我用来将文件上传到我的PHP服务器的简单函数(xhr嵌套在一个请求中RxJS/Observable):

fileUpload(file: File): Observable {

return new Observable( observer => {

let xhr:XMLHttpRequest = new XMLHttpRequest();

xhr.onreadystatechange = () => {

if (xhr.readyState === 4) {

if (xhr.status === 200) {

observer.next(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这个任务?