我正在学习RxJ,这很酷。我正在尝试创建一个页面,其中Ajax调用是间隔时间,因此数据将每5秒刷新一次。所以我想我会这样做。

var ajax = new Promise(function(resolve) {
  return resolve('test');
});

var source1 = Rx.Observable.interval(5000)
  .map(function(i) {
    return Rx.Observable.fromPromise(ajax);
  });

source1.subscribe(function(res) {
    res.subscribe(function(pro) {
    console.log(pro);
  })
});

但是,事实上我需要做两个subscribe,这让我觉得我在这里可能做错了。我不确定我的方向是否正确?

我想要的是每五秒钟获取一次的 promise 流。

这是我的jsfiddle

https://jsfiddle.net/noppanit/2y179dgg/

最佳答案

您需要使用flatMap运算符。看看jsbin here

var ajax = new Promise(function(resolve) {
  return resolve('test');
});

var source1 = Rx.Observable.interval(1000)
  .flatMap(function(i) {
    return Rx.Observable.fromPromise(ajax);
  });

source1.subscribe(function(res) {
    console.log(res);
});

SO上有大量使用flatMap的示例。

您还可以咨询:
  • 来自SO:Why we need to use flatMap?
  • 精美呈现:The introduction to Reactive Programming you've been missing
  • 官方文档:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/selectmany.md
  • 说明性弹珠:http://reactivex.io/documentation/operators/flatmap.html
  • 09-25 18:13