在一个时间间隔内从Observable.from发出值

时间:2017-03-17 18:32:21

标签: angular rxjs

我想要在一段时间内从Observable发出一系列项目。

我正在使用Angular 2中包含的rxjs库。

这是我目前的解决方案,但我觉得有一种我没有找到的反应方法。在阵列耗尽之后,此解决方案也会继续生成值,但它应该真正完成。有没有办法用Observable.from来驱动Observable.interval?:

var array = [1,2,3];

var source = Rx.Observable
    .interval(500 /* ms */)
    .map(function() {
      return array.pop();
    });

var subscription = source.subscribe(
    function (x) {
        console.log('Next:', x);
    },
    function (err) {
        console.log('Error: ' + err);   
    },
    function () {
        console.log('Completed');   
    });

输出:

"Next:"
3
"Next:"
2
"Next:"
1
"Next:"
undefined

1 个答案:

答案 0 :(得分:2)

对于像这样简单的东西,你做的很好,除了我宁愿使用interval给出的索引来读取给定索引处的数组而不是使用pop修改原始数组(混合了反应式编程,它有点奇怪,不是它=)!)

我向你提出了另一个建议,所以你可能会发现其他运营商:

const { Observable } = Rx

const myArray = [1, 2, 3]

const interval$ = Observable.interval(500)

Observable
  .from(myArray)
  .zip(interval$)
  .do(([x]) => console.log(x))
  .subscribe(
    () => {},
    () => {},
    () => console.log('Stream ended !')
  )
<script src="https://unpkg.com/rxjs@5.1.1/bundles/Rx.min.js"></script>