Bil*_*ild 5 rxjs angular-http rxjs5 angular angular5
我有一个Angular 5网站,它消耗着一个宁静的WCF Web服务。Web服务又与与数据库对话的业务对象进行交互。我正在使用@ angular / common / http模块将Web服务消耗到一个可观察的对象中,然后将其呈现在网页上。到目前为止,一切都很好。
现在,我还在通过Web服务更新数据库,它也可以正常工作。
但是,这有点慢,我希望能够通过更新Web服务调用直接并同时更新Observable,这样网站就不必等待数据通过Web服务通过Web服务了。企业资源规划业务对象到数据库的速度非常慢,然后又回落到Observable对象,通过异步管道更新屏幕。
因此,我心想,为什么不只用BehaviorSubjects代替Observables?然后,我可以只使用BehaviorSubject上的“ next”方法来快速更新页面。
但是,当我尝试...
public cartons$: BehaviorSubject<ICartonTrackDetail[]>;
this.cartons$ = this.cartonService.getCartonsObservable();
Run Code Online (Sandbox Code Playgroud)
我收到此错误...
Type 'Observable<ICartonTrackDetail[]>' is not assignable to type 'BehaviorSubject<ICartonTrackDetail[]>'.
Property '_value' is missing in type 'Observable<ICartonTrackDetail[]>'.```
Run Code Online (Sandbox Code Playgroud)
现在,该错误是有道理的,但它使我退后一步并想知道:实现目标的最佳方法是什么?
您想要一个主题,可以让您将客户端更新注入到流中,并且您希望将该主题与来自服务器的流数据的可观察对象合并。
像这样的东西:
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 ..
Run Code Online (Sandbox Code Playgroud)
现在,任何订阅的代码都cartons$将在您致电时收到更新clientStream$.next(newData)
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |