将Angular 5 http.get转换为BehaviorSubject以在客户端上进行多播数据更改

时间:2018-05-02 18:40:11

标签: angular rxjs angular5 rxjs5 angular-http

我有一个有角度的5网站,它使用了一个宁静的wcf网络服务。反过来,Web服务与业务对象交互,这些业务对象与数据库通信。我正在使用@ angular / common / http模块将Web服务用于一个可观察对象,然后在网页上呈现。到目前为止一切都很好。

现在,我也通过网络服务更新数据库,这也很好。

但是,它有点慢,我希望能够直接和更新Web服务调用同时更新Observable,以便网站不必等待数据通过Web服务,通过极其缓慢的企业资源规划业务对象,到数据库,然后返回到Observable对象,通过异步管道更新屏幕。

所以,我想,为什么不用BehaviorSubjects替换Observables?然后,我可以在BehaviorSubject上使用“next”方法快速更新页面。

但是,当我尝试那个......

select * into ForMSDB..tbl_SecurityNamespace
from Tfs_configuration; 

我收到此错误...

#standardSQL
with table1 as(
select "America" as country_name union all
select "Germany" as country_name union all
select "England" as country_name union all
select "Nauru" as country_name union all
select "Brunei" as country_name union all
select "Kiribati" as country_name union all
select "Djibouti" as country_name union all
select "Malta" as country_name
)
select * from table1

现在,这个错误是有道理的,但它让我退后一步,想知道:实现目标的最佳途径是什么?

1 个答案:

答案 0 :(得分:1)

您想要一个主题,它允许您将客户端更新注入到流中,并且您希望将此主题与来自服务器的流数据的observable合并。

这样的事情:

private clientStream$ : Subject<ICartonTrackDetail[]>;

public cartons$ : Observable<ICartonTrackDetail[]>;

// setup
const serverStream = this.cartonService.getCartonsObservable();
this.clientStream$ = new Subject<ICartonTrackDetail[]>();
this.cartons$ = serverStream.merge(this.clientStream$);

// when you get new data to send to server:
this.clientStream$.next(newData);
.. add code to send newData to server like normal ..

现在订阅cartons$的任何代码都会在您调用clientStream$.next(newData)

时收到更新