我是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()
块不是实现这一目标的最佳方式.任何指导将不胜感激.
编辑:希望通过这个问题澄清我在寻找什么.