Angular 是否有可能以一种我可以持续反馈的方式使用观察值?
假设我订阅了一个可观测的Angular 是否有可能以一种我可以持续反馈的方式使用观察值?,angular,rxjs,observable,Angular,Rxjs,Observable,假设我订阅了一个可观测的 this.calculateService.CalculateBestRoute().subscribe( data => { drawRoute(data); } ); 比如说CalculateBestRoute函数需要很长时间才能完成,因为它做了很多事情,但是当它做这些事情的时候,路线变得越来越好 public CalculateBestRoute(): Observable<Route> { let bestRoute;
this.calculateService.CalculateBestRoute().subscribe(
data => {
drawRoute(data);
}
);
比如说CalculateBestRoute函数需要很长时间才能完成,因为它做了很多事情,但是当它做这些事情的时候,路线变得越来越好
public CalculateBestRoute(): Observable<Route> {
let bestRoute;
DoThing1(bestRoute);
DoThing2(bestRoute);
DoThing3(bestRoute);
DoThing4(bestRoute);
return Observable.of(bestRoute);
}
public calculatebstroute():可观察{
让我们走最好的路线;
DoThing1(最佳路线);
DoThing2(最佳路线);
DoThing3(最佳路线);
DoThing4(最佳路线);
可观察的返回(最佳路线);
}
如果我有这个代码,bestRoute只会在最后返回。但如果我不想等待——如果我只是想看看当时最好的路线是什么呢
有可能使用可观察的物体吗?我在找下面这样的东西
public CalculateBestRoute(observable : Observable<Route>) {
let bestRoute;
DoThing1(bestRoute);
observable.update(bestRoute);
DoThing2(bestRoute);
observable.update(bestRoute);
DoThing3(bestRoute);
observable.update(bestRoute);
DoThing4(bestRoute);
observable.update(bestRoute);
}
public CalculateBestRoute(可观察:可观察){
让我们走最好的路线;
DoThing1(最佳路线);
可观察。更新(最佳路线);
DoThing2(最佳路线);
可观察。更新(最佳路线);
DoThing3(最佳路线);
可观察。更新(最佳路线);
DoThing4(最佳路线);
可观察。更新(最佳路线);
}
我觉得你在描述一个问题。这既是一个观察者,也是一个可观察者,因此您可以订阅它,并将新数据推送到其中
private routeSubject=新主题。发布/订阅模式可以使用Subject
实现
以下代码是工作演示
interface Route {
length: number;
}
let routeSubject = new Subject<Route>();
function update(route:Route) {
routeSubject.next(route);
}
function doThing(route:Route) {
route.length++;
}
function calculateBestRoute(observable: Observable<Route>) {
let bestRoute:Route = { length: 0};
doThing(bestRoute);
update(bestRoute);
doThing(bestRoute);
update(bestRoute);
doThing(bestRoute);
update(bestRoute);
doThing(bestRoute);
update(bestRoute);
}
routeSubject.subscribe(value => console.log(`updated: ${value.length}`));
calculateBestRoute(routeSubject);
CalculateBStroute
必须创建并返回可观察的最佳路线:
public calculateBestRoute() {
return Rx.Observable.create(function(observer) {
let bestRoute;
DoThing1(bestRoute);
observer.onNext(bestRoute);
DoThing2(bestRoute);
observer.onNext(bestRoute);
DoThing3(bestRoute);
observer.onNext(bestRoute);
DoThing4(bestRoute);
observer.onNext(bestRoute);
observer.onCompleted();
})
}
我想你需要看一下这些文件。您应该看到,.next()
中有一个基本方法,可以将新事物“注入到可观察的流中”。你的问题可能不那么迟钝,但这似乎是你通常想说的。你的例子不太连贯,但听起来像是在描述一个问题。我写了一篇关于我们如何使用这种模式的博文,如果你想了解更多信息:@jornsharpe-谢谢,是的,也许我想要的甚至不是一个可见的。我来看看主体是可观察的。但是,如果您的计算是同步的,那么修改某些组件的状态AFAIK在下一次更改检测之前不会产生任何效果,而下一次更改检测在计算完成之前不会发生。这看起来像是工人的工作。
public calculateBestRoute() {
return Rx.Observable.create(function(observer) {
let bestRoute;
DoThing1(bestRoute);
observer.onNext(bestRoute);
DoThing2(bestRoute);
observer.onNext(bestRoute);
DoThing3(bestRoute);
observer.onNext(bestRoute);
DoThing4(bestRoute);
observer.onNext(bestRoute);
observer.onCompleted();
})
}