数组中的RxJS-观察数组并在更改时写入控制台?

时间:2019-05-01 20:27:15

标签: javascript rxjs

.subscribe是否有可能定期侦听数组及其元素,并在每次将它们压入数组时console.log新的元素?

这是我正在尝试的一些代码

let arr = [1, 2, 3, 4, 5]
let arraySource = from(arr);
//output: 1,2,3,4,5

let subscribe = arraySource.subscribe(val => console.log(val));

setTimeout(() => {
  arr.push(6);
},2000);

预先感谢

2 个答案:

答案 0 :(得分:0)

问题是arrarr$没有“连接”。订阅arr$后,将发出arr中原来的元素,然后观察对象完成。对arr的进一步推送将不会通过arr$

const arr = [1,2,3];
const arr$ = from(arr);
arr$.subscribe(n => console.log(`n=${n}`));
arr.push(4);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.1/rxjs.umd.min.js"></script>
<script>const {from} = rxjs;</script>

您可能应该看看Subject并使用next()推送数据。

但是,如果您不关心arr,而只是想使用push()来通过可观察的数据推送数据,则有一种黑客手段。我个人不会这样做,但是我将出于演示目的展示它:

const arr = [];
const arr$ = fromEventPattern(handler => arr.push = handler);

arr$.subscribe(n => console.log(`n=${n}`));

let i = 0;
setInterval(() => arr.push(i++), 500);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.1/rxjs.umd.min.js"></script>
<script>const {fromEventPattern} = rxjs;</script>

答案 1 :(得分:-1)

我认为您需要像这样使用observable.next()

let arr = [1, 2, 3, 4, 5]
let arraySource = from(arr);
//output: 1,2,3,4,5

let subscribe = arraySource.subscribe(val => console.log(val));

setTimeout(() => {
  arraySource.next(6);
},2000);

也许还有另一个订户更新数组?