Нужно каждую секунду опрашивать сервер на наличие нужных данных и делать это нужно не больше скольки-то раз или до истечения определенного времени.
Реализовал оба варианта так. Но, учитывая, распространенность задачи, может быть есть более подходящие варианты?
//Имитация запроса
let id = 0
function getData() {
return Rx.Observable.create(observer => {
setTimeout(() => {
observer.next({id: id});
observer.complete({id: id});
id++
}, 500);
})
}
//Ошибка после 10 попыток
Rx.Observable
.timer(0, 1000)
.switchMap((data, i) => i < 10 ? getData() : Rx.Observable.throw('timeout'))
.find(data => data.id === 5)
.subscribe(data => console.log('next', data), error => console.log('error', error), () => console.log('complete'));
//Ошибка после 10 с.
Rx.Observable
.merge(Rx.Observable.timer(0, 1000), Rx.Observable.never().timeout(10000))
.switchMap(() => getData())
.find(data => data.id === 5)
.subscribe(data => console.log('next', data), error => console.log('error', error), () => console.log('complete'));