Javascript 可观测-防止阵列未完成
假设我有这样一个数组:Javascript 可观测-防止阵列未完成,javascript,rxjs,reactive-programming,observable,angular2-observables,Javascript,Rxjs,Reactive Programming,Observable,Angular2 Observables,假设我有这样一个数组: const values = [1,2,3]; const obs = Rx.Observable.from(values); setTimeout(function(){ values.push(4); values.push(5); values.push(6); }, 3000 ); 我从这个数组中创建了一个可观察对象,如下所示: const values = [1,2,3]; const obs = Rx.Observable.f
const values = [1,2,3];
const obs = Rx.Observable.from(values);
setTimeout(function(){
values.push(4);
values.push(5);
values.push(6);
}, 3000 );
我从这个数组中创建了一个可观察对象,如下所示:
const values = [1,2,3];
const obs = Rx.Observable.from(values);
setTimeout(function(){
values.push(4);
values.push(5);
values.push(6);
}, 3000 );
我是这样订阅的:
obs.subscribe(
function onNext(result){
console.log('item =>', result);
},
function onError(e){
console.error(e.stack || e);
},
function onCompleted(){
console.log('observable is completed');
}
);
我遇到的问题是,如果我像这样将新项目推送到阵列中:
const values = [1,2,3];
const obs = Rx.Observable.from(values);
setTimeout(function(){
values.push(4);
values.push(5);
values.push(6);
}, 3000 );
这些项目(4,5,6)不会显示在subscribe()回调中
所以我的问题是,我们如何创建一个可观察的数组,它可以“保持打开”,这样,如果将来项目被推到数组上,那么观察者回调将触发
为此,我提出了一个要点:
这是一把小提琴:
如果您正在寻找通过直接调用推送值的功能,则需要使用
主题
将受试者用于常规操作被认为是不好的做法,并且违背了Rx的精神。主体本质上是Rx的可变变量
大多数情况下,您可以从内置操作符中获得所需的任何功能,或者创建新的操作符来组合现有的操作符 使用当前设置,observable将不会监视阵列更新。可观察对象是用它最初拥有的值创建的。不过你需要的是一个主题。@AadiDroid谢谢,你能补充一个更详细的答案吗?我是个新手observables@AlexanderMills我建议您先学习观察者模式和rx的基本理论。以身作则将是痛苦的。我熟悉观察者模式。RxJS和反应式编程似乎更为重要。我不认为RxJS比学习流更简单,在学习流中,与回调或承诺相比,流更难完全理解。此外,我不认为通过示例学习比通过阅读文档学习更难,我通常不会那样学习。这对我来说很有效,不确定为什么这会使事情变得易变?