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();
  })
}