Представьте себе сервис с тремя конечными точками.
- Отправь работу и верни ID работы
- Подать запрос статуса и вернуть статус
- Отправьте запрос результатов и получите результаты
Мне нужно решение, чтобы отправить работу и опросить результаты, пока статус работы не будет выполнен. Поскольку конечные точки состояния и результатов независимы, мне нужно убедиться, что я сделал один последний запрос результатов после того, как было определено, что статус DONE.
Я пытался использовать много операторов rxjs, но безрезультатно. Я могу сделать опрос легким, но самая сложная часть - остановить опрос точно в нужное время. Когда я использую takeWhile или takeUntil, мой опрос останавливается, прежде чем я могу получить результаты.
return submitJob(request).pipe(
delay(500), // Delay start of poll
switchMap(job => getResults(job).pipe(
repeatWhen(c => c.pipe(delay(1000))), // Keep getting results every second
takeUntil(getStatus(job).pipe(
filter(status => status.done)
))
)
);
Проблема в том, что статус Задания выполняется немедленно и вызов результатов отменяется. Мой код никогда не отправляет запрос результатов. Мне нужно сделать хотя бы один звонок, чтобы получить результаты ПОСЛЕ того, как статус возвращается, как сделано.