rxjs angular2 使用无限循环遍历数组

rxjs angular2 iterate over array with infinite loop

我正在尝试创建一个遍历数组中的元素的循环,并且我想 运行 循环一旦完成就重新开始。

我从以下片段开始

 Observable.interval(1000).startWith(0)
                            .repeat()
                            .take(array.length)
                            .map(i => array[i])
                            .subscribe(item => { 
// some operation here 
             });    

但它对我的情况不起作用。

您的代码的问题是您将 take 放在 repeat 之后,因此 take 将取消订阅源和 repeat

另一种选择是只取数组的第 % n 个元素,因为 interval 发出数字,我们可以使用它。我注意到您将 startWith 添加到 interval。获得没有延迟开始的间隔的另一种方法是使用 timer(0, interval)。因此我们的最终代码可能如下所示:

Observable.timer(0, 1000)
  .map(e => array[e % array.length])
  .subscribe(item => { ... })
function arrayRepeat(array) {
  var last = 0; 
  return function() {
    if(last === array.length) last = 0;
    return array[last++];
   }
}

Rx.Observable.create(obs => {
  let nextItem = arrayRepeat([1,2,3]);
  let in = setInterval(() => {
     obs.next(nextItem());
 }, 1000);
 return () => clearInterval(in);
}).subscribe(x=>console.log(x))