Reactive Extensions(Rx)执行定期任务

Luc*_*ile 1 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);
});
Run Code Online (Sandbox Code Playgroud)

所以.我已经阅读过Scheduler及其schedulePeriodic方法,但我不能定期执行我的任务.

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

有任何想法吗?

提前致谢!

Ben*_*esh 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.
});
Run Code Online (Sandbox Code Playgroud)

编辑:"如果我想让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);
  });
});
Run Code Online (Sandbox Code Playgroud)