Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可观测-防止阵列未完成_Javascript_Rxjs_Reactive Programming_Observable_Angular2 Observables - Fatal编程技术网

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比学习流更简单,在学习流中,与回调或承诺相比,流更难完全理解。此外,我不认为通过示例学习比通过阅读文档学习更难,我通常不会那样学习。这对我来说很有效,不确定为什么这会使事情变得易变?