Próbuję użyć RxJS do prostej, krótkiej ankiety. Musi składać żądanie co godzinę delay
sekund do lokalizacji path
na serwerze, kończąc, gdy jeden z dwóch warunków zostanie osiągnięty: albo wywołanie zwrotne isComplete(data)
zwraca wartość true, albo spróbowało serwera więcej niż maxTries
. Oto kod podstawowy:RxJS 5.0 Mechanizm "rób tak, jak"
newShortPoll(path, maxTries, delay, isComplete) {
return Observable.interval(delay)
.take(maxTries)
.flatMap((tryNumber) => http.get(path))
.doWhile((data) => !isComplete(data));
}
Jednak doWhile nie istnieje w RxJS 5,0, a więc stan, w którym może on próbować serwera tylko maxTries
prace, dzięki odbioru() rozmowy, ale stan isComplete
nie praca. Jak mogę uczynić to tak, aby obserwowalne wartości next() do momentu, aż isComplete zwróci true, w którym to momencie next() będzie wartością i complete().
Należy zauważyć, że takeWhile()
nie działa dla mnie tutaj. Nie zwraca ostatniej wartości, która jest rzeczywiście najważniejsza, ponieważ wtedy wiemy, że to zrobione.
Dzięki!
Ewentualnie duplikat: http://stackoverflow.com/questions/36007911/rxjs-poll-until-interval-done-or-correct-data-received –
To nie jest duplikat w tym sensie, że pytanie wymaga zastąpienia "doWhile". –