我想要在一段时间内从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
答案 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>