Я использую Observable.create, чтобы поднять события загрузки из xhr.
У меня есть этот код:
return Observable.create((observer) => {
xhr.open('GET', url);
xhr.send();
xhr.addEventListener('progress', (progress) => {
const percentCompleted = percentCompleted = Math.round((progress.loaded / progress.total) * 100);
observer.next({ state: DownloadState.progress, progress: `${percentCompleted}%` });
});
xhr.addEventListener('load', (e: any) => {
if (e.target['status'] !== 200) {
observer.error({ state: DownloadState.failure, error: e.target });
} else {
observer.next({ state: DownloadState.progress, response: e.target });
observer.complete();
}
});
xhr.addEventListener('error', (err) => {
console.log('upload error', err);
observer.error({ state: DownloadState.failure, error: err.message });
});
xhr.addEventListener('abort', (abort) => {
console.log('upload abort', abort);
observer.error({ state: DownloadState.failure, error: 'Transfer aborted by the user' });
});
return () => xhr.abort();
});
}
сделать невозможно Observable.create
строго типизирован в 5.1.0.
Должен ли я создать BehaviorSubject
?
Как я могу реорганизовать свой код в строго типизированную версию?