【发布时间】:2016-09-08 10:27:26
【问题描述】:
我试图将Observable.interval() 与.flatMap() 联系起来,但我得到了(我认为是)一个意想不到的行为。
这是我正在使用的代码(使用 Angular 2):
Observable.interval(1500)
.scan( (numArr:any[],curr:any,i:number) => {
numArr.push(i);
return numArr;
}, [])
.do(arr => console.log('interval value', arr))
.flatMap(numArr => {
return Observable.interval(500)
.map(i => {
numArr.forEach((el, i, arr) => {
arr[i] += 1;
})
return numArr;
})
}).subscribe(res => console.log('final value', res));
我得到的结果是
interval value [0]
final value [1]
final value [2]
interval value [2, 1]
final value [3, 2]
final value [4, 3]
final value [5, 4]
final value [6, 5]
final value [7, 6]
interval value [7, 6, 2]
final value [8, 7, 3]
final value [9, 8, 4]
final value [10, 9, 5]
....
我希望在每个“间隔值” 周期之间接收 3 个值,而不是每次间隔发出一个值时我都会得到一个更大的列表...为什么会发生这种情况,我该如何避免这种情况行为?
我想要实现的是将第一个 Observable.interval() 每 500 毫秒发出的数组的每个值增加 1。
换句话说,我期望的是:
interval value [0]
final value [1]
final value [2]
final value [3]
interval value [3, 1]
final value [4, 2]
final value [5, 3]
final value [6, 4]
interval value [6, 4, 1]
final value [7, 5, 2]
final value [8, 6, 3]
final value [9, 7, 4]
....
希望你能帮忙,谢谢。
【问题讨论】:
标签: angularjs rxjs observable