我有一段从组件中调用的代码:
choose(n?: number): Observable<PickQuality[]> {
var chosenObserver: Observer<PickQuality[]>;
alert(n); // <-- Notice this line
this.getOptions().subscribe(options => {
alert(n); // <-- And this one
this.reevaluate();
var sorted = options.sort((a, b) => b.score - a.score);
var chosen: PickQuality[];
if(n) chosen = sorted.slice(0, n);
else chosen = sorted.slice(0, 1);
chosenObserver.next(chosen);
});
let obs = new Observable<PickQuality[]>(observer => chosenObserver = observer);
return obs;
}
电话如下:
test.choose().subscribe(a => console.log(a));
test.choose(5).subscribe(b => console.log(b));
test.choose(15).subscribe(c => console.log(c));
第一次警告打印正确打印(“未定义”,“5”,“15”),但第二次打印“15”3次。为什么这会发生颂歌?它工作正常但我做了一些改变(并且无法跟踪)改变了这一点,我似乎无法修复它。
答案 0 :(得分:0)
我猜这里,但我想你想通过share()分享订阅。
当订阅已发布的observable的观察者数从0变为1时,我们连接到基础可观察序列。
添加第二个订阅者时,不会向其添加其他订阅 潜在的可观察序列。结果导致了操作 每个订阅者不会重复这些效果。
constructor() {
this.observable = ....share()
}
getOptions() {
return this.observable;
}