.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);
预先感谢
答案 0 :(得分:0)
问题是arr
和arr$
没有“连接”。订阅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);
也许还有另一个订户更新数组?