Я новичок в RxJS, и я пытаюсь написать приложение, которое выполнит следующие действия:
- При загрузке сделайте запрос AJAX (поддельный как
fetchItems()
для простоты), чтобы получить список элементов. - Через секунду после этого сделайте запрос AJAX для получения элементов.
- При проверке новых элементов ТОЛЬКО элементы, которые были изменены после того, как самая последняя временная метка должна быть возвращена.
- Не должно быть никакого состояния, внешнего по отношению к наблюдаемым.
Моя первая попытка была очень прямой и соответствовала целям 1, 2 и 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();
});
Теперь я взволнован, это было легко, не может быть намного труднее встретить цель 3... через несколько часов это где я нахожусь в:
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;
}, []);
Это решает цель 3, но регрессирует по цели 4. Теперь я сохраняю состояние вне наблюдаемого.
Я предполагаю, что глобальный блок modifiedSince
и .do()
не лучший способ выполнить это. Любое руководство будет с большой благодарностью.
EDIT: надеюсь, уточнил, что я ищу с этим вопросом.