Observables - 阻止onCompleted for array

时间:2016-12-18 21:55:30

标签: javascript rxjs reactive-programming observable angular2-observables

让我们说我有一个像这样的数组:

const values = [1,2,3];

我从这个数组中创建了一个observable,如下所示:

const obs = Rx.Observable.from(values);

我订阅如此:

obs.subscribe(
    function onNext(result){
        console.log('item =>', result);
    },
    function onError(e){
        console.error(e.stack || e);
    },
    function onCompleted(){
        console.log('observable is completed');
    }
);

我遇到的问题是,如果我将新项目推送到数组中,那么:

setTimeout(function(){   
   values.push(4);
   values.push(5); 
   values.push(6);
}, 3000 );

这些项目(4,5,6)没有出现在subscribe()回调中!

所以我的问题是,我们如何创建一个可以保持开放的可观察数组?#34;所以如果将来将项目推送到数组上,那么观察者回调将会触发吗?

我为此创造了一个要点:

https://gist.github.com/ORESoftware/677ad0a3adf41c04a60829921ba4c4c4

这是一个小提琴:

https://jsfiddle.net/mcq40Lmg/

1 个答案:

答案 0 :(得分:1)

如果您正在寻找通过直接通话推送价值的功能,则需要使用Subject<T>

const values = Rx.Observable.Subject();

setTimeout(function(){

   values.onNext(4);
   values.onNext(5); 
   values.onNext(6);

}, 3000 );

使用主题进行日常操作并不是一种好习惯,违背了Rx的精神。主题实质上是Rx的可变变量。

您可以从内置运算符中获取所需的任何功能,或者创建组合现有运算符的新功能。