当前位置:  开发笔记 > 编程语言 > 正文

RxJS,如何轮询API以使用动态时间戳持续检查更新的记录

如何解决《RxJS,如何轮询API以使用动态时间戳持续检查更新的记录》经验,为你挑选了0个好方法。

我是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()块不是实现这一目标的最佳方式.任何指导将不胜感激.

编辑:希望通过这个问题澄清我在寻找什么.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有