Как выполнить следующий сценарий в браузере с помощью RxJs:
- отправить данные в очередь для обработки
- вернуть идентификатор задания
- опросить другую конечную точку каждые 1 с до тех пор, пока не будет достигнут результат или не пройдет 60 секунд (затем провалится)
Промежуточное решение, с которым я столкнулся:
Rx.Observable
.fromPromise(submitJobToQueue(jobData))
.flatMap(jobQueueData =>
Rx.Observable
.interval(1000)
.delay(5000)
.map(_ => jobQueueData.jobId)
.take(55)
)
.flatMap(jobId => Rx.Observable.fromPromise(pollQueueForResult(jobId)))
.filter(result => result.completed)
.subscribe(
result => console.log('Result', result),
error => console.log('Error', error)
);
- Есть ли способ без промежуточных переменных остановить таймер после поступления данных или возникновения ошибки? Теперь я могу представить новые наблюдаемые, а затем использовать
takeUntil
- Использование
flatMap
здесь семантически корректно? Возможно, все это должно быть переписано и не привязано цепью с помощьюflatMap
?