Reactive Extensions(Rx)执行定期任务

时间:2014-12-18 19:25:42

标签: scheduled-tasks reactive-programming rxjs

我正在使用Rx,并希望每隔1分钟定期执行一项任务。

我的任务是从一组URL中异步获取Feeds并且它正常工作:

var rssLinks = ["http://host1/rss.xml", "http://host2/rss.xml", "http://host3/rss.xml"];

// My Task
var task = Rx.Observable.from(rssLinks)
.flatMap(functions.fetchFeeds);

task.subscribe(function(feed) {
    console.log("\nFeed " + feed.title + ", " + feed.link);
});

因此。我已经读过有关Scheduler及其schedulePeriodic方法但我不能定期执行我的任务。

var disposable = Rx.Scheduler.timeout.schedulePeriodic(
 60000, /* 1 minute */
 function () {
      // Execute My Task...        
 });

有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:9)

您只是在寻找Rx.Observable.interval,所以这样的事情会发生:

var taskResults = Rx.Observable.interval(60000).flatMap(function() {
  return Rx.Observable.from(rssLinks).flatMap(functions.fetchFeeds);
});

taskResults.subscribe(function(x) {
  // do whatever here.
});

编辑:"如果我希望rssLinks确定我的间隔"回答(来自评论)

这样的事情,也许吧?

var rssLinks = [{ interval: 5000, url: 'http://whatever'}, { interval: 3000, url: 'https://foobar' }];

var taskResults = Rx.Observable.from(rssLinks).flatMap(function(rssLink) {
  return Rx.Observable.interval(rssLink.interval).map(function(rssLink) {
    return functions.fetchFeeds(rssLink.url);
  });
});