RxJs合并流

RxJs合并流,rxjs,rxjs5,Rxjs,Rxjs5,我期待着合并流和刷新所有订户 出于函数式编程的目的,concat不更新当前的observable,我也不知道该怎么做 这就是我希望事情发生的方式: var observable=Rx.observable.from(['stream1']); var subscription=可观察的。订阅( 功能(x){ console.log('Next:'+x); }, 功能(err){ log('Error:'+err); }, 函数(){ console.log('Completed'); }); 可

我期待着合并流和刷新所有订户

出于函数式编程的目的,concat不更新当前的observable,我也不知道该怎么做

这就是我希望事情发生的方式:

var observable=Rx.observable.from(['stream1']);
var subscription=可观察的。订阅(
功能(x){
console.log('Next:'+x);
},
功能(err){
log('Error:'+err);
},
函数(){
console.log('Completed');
});
可观测浓度(Rx.observable.from(['stream2']);
此代码仅读取第一个流,然后转到“已完成”。 当concat创建一个新的可观察对象时,我并不真正想要它,因为我已经订阅了第一个

当我甚至不能进入第一个可观察的领域时,正确的方法是什么


谢谢

你想做的事情并不是完全可能的,但是你基本上有两个选择,都涉及到
主题的使用

1) 手动发送数据

const obs$=Rx.Observable.of(“stream1”);
const subc$=新的Rx.Subject();
可观测合并(obj$,SUB$)
.订阅(
x=>console.log('Next:'+x),
x=>console.log('Error:'+x),
()=>console.log('Complete')
);
sub.next美元(“stream2”);
sub.next美元(“stream3”);
但是:在这种情况下,将永远不会调用complete,因为
主题本身永远不会完成-因此,如果需要触发
complete
-处理程序,则必须添加一个手动
subg$.complete()结束


2) 通过主题进行多播

const obs$=Rx.Observable.of(“stream1”);
const subc$=新的Rx.Subject();
subc$。订阅(
x=>console.log('Next:'+x),
x=>console.log('Error:'+x),
()=>console.log('Complete')
);
obs$.subscribe(x=>subs$.next(x));
const obs2$=可观测的(“stream2”);
obs2$.subscribe(x=>subb$.next(x));
在这种情况下,
主题
基本上将充当“代理”,只传播数据,而不传播错误或完整触发器

这两种解决方案都不是很“好”——但也许您可以更好地概述您的用例,我相信有一个合适的解决方案,它不涉及任何复杂的工作环境


如果您只想有一种方法以永久可观察的形式持续提供数据,您应该使用
行为主体
-它的工作方式是,您可以在其上发送数据,同时订阅数据:

类服务{
公共数据$=新行为主体(someInitialDataorFull);
公共获取数据(){
makeSomeHttpCall()
.subscribe(数据=>data$.next(数据));
}
}
类组件{
构造函数(){
service.data$.subscribe(数据=>console.log(数据));
}
}

这里有一个到的旧文档的链接(它基本上仍然以相同的方式工作,除了
onNext
being
next
now等…)

非常感谢您的回答。我的想法是,服务将提供来自api或其他来源的可观察数据。我的另一个组件正在订阅它,因此它从一开始就需要是一个可观察的组件,并且当数据可用时,它将提供给其他组件。正确的图案是什么?非常感谢。你搞定了!