Jestem nowy RxJS i próbuję napisać aplikację, która będzie wykonywać następujące rzeczy:RxJS, jak odpytywać API do ciągłego sprawdzania dostępności zaktualizowanych rekordów przy użyciu dynamicznego timestamp
- Na obciążenia sprawiają, że żądanie AJAX (podrobione jako
fetchItems()
dla uproszczenia) w celu pobrania listy elementów. - Co sekundę, wykonaj żądanie AJAX, aby uzyskać przedmioty.
- Podczas sprawdzania nowych pozycji, TYLKO elementy zostały zmienione po zwrocie ostatniego znacznika czasu.
- Nie powinno być żadnych stanów zewnętrznych względem obserwowalnych.
Moja first attempt była bardzo prosta i spełnione cele 1, 2 i 4.
var data$ = Rx.Observable.interval(1000)
.startWith('run right away')
.map(function() {
// `fetchItems(modifiedSince)` returns an array of items modified after `modifiedSince`, but
// I am not yet tracking the `modifiedSince` timestamp yet so all items will always be returned
return fetchItems();
});
Teraz jestem podekscytowany, że było łatwo, to nie może być tak, że znacznie trudniej zrealizować cel 3 ... kilka godzin później to where I am at:
var modifiedSince = null;
var data$ = Rx.Observable.interval(1000)
.startWith('run right away')
.flatMap(function() {
// `fetchItems(modifiedSince)` returns an array of items modified after `modifiedSince`
return fetchItems(modifiedSince);
})
.do(function(item) {
if(item.updatedAt > modifiedSince) {
modifiedSince = item.updatedAt;
}
})
.scan(function(previous, current) {
previous.push(current);
return previous;
}, []);
rozwiązuje ten cel 3, ale cofa się na strzał 4. jestem teraz przechowującej stan poza obserwowalny.
Zakładam, że globalny modifiedSince
i blok .do()
nie są najlepszym sposobem na osiągnięcie tego. Wszelkie wskazówki będą mile widziane.
EDYCJA: mam nadzieję, że wyjaśniono, czego szukam z tym pytaniem.
skąd wiesz pozycja się zmieniła i co raz ostatni wystąpił zmiana? Chodzi o zarządzanie stanem, jeśli dobrze określisz swój stan, operator 'scan' powinien pomóc w utrzymaniu tego stanu przez całe życie twojego obserwowalnego. – user3743222
@ user3743222 Mam zaktualizowane pytanie, aby wyjaśnić. Muszę uzyskać max 'updatedAt' z' fetchItems (modifiedSince) 'i podać tę wartość do' fetchItems' przy następnym wywołaniu. – user774031