Я пытаюсь настроить простую очередь, затем опрашивать, пока не завершится механизм стилей с использованием rxjs Observables, и изо всех сил пытался выяснить, что я делаю неправильно.
У меня есть следующий код
siteService.queue("123") //(1) Queues a processing task
.pipe(
switchMap((res) => {
console.log("Polling for changes...");
return timer(100, 2000) //(2)
.pipe(
flatMap(() => {
console.log("Fetching Site...");
return siteService.get("123); //(3)
}),
takeWhile((res: SiteResponse) => {
let r = res.site.site_generation_status !== 'Current';
console.log("Take While", r); //(4)
return r;
})
);
})
)
.subscribe((res) => {
console.log("Result", res);
}, (err) => {
console.error("Error", err);
}, () => {
console.log("Done")
});
Этот код должен поставить в очередь некоторый запрос на обработку (1), который затем установит site_generation_status объекта сайта в 'Queued' и будет выполнен некоторым внутренним процессом, который в конечном итоге обновит статус до 'Current' , Идея состоит в том, что таймер (2) должен сначала получить результат через 100 мс, а затем запускать каждые 2000 мс, пока не будет получено значение generation_status.
Этот код в основном работает, однако, вызов в (3) продолжает выполняться после того, как takeWhile (4) оценивается как ложное
Вот какой-то вывод консоли
Polling for changes...
Fetching Site...
Take While true
Result {site: {…}}
Fetching Site...
Take While true
Result {site: {…}}
Fetching Site...
Take While true
Result {site: {…}}
Fetching Site...
Take While false
Done
Fetching Site...
Fetching Site...
Fetching Site...
Fetching Site...
Есть ли у кого-нибудь какие-либо идеи относительно того, что может вызывать продолжение выполнения команды в (3) после того, как takeWhile оценивается как true и подписка заканчивается (обозначается как «Готово» в выходных данных журнала)