为什么最后一次调用会执行3次?

时间:2017-02-14 23:56:08

标签: angular reactive-programming observable

我有一段从组件中调用的代码:

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次。为什么这会发生颂歌?它工作正常但我做了一些改变(并且无法跟踪)改变了这一点,我似乎无法修复它。

1 个答案:

答案 0 :(得分:0)

我猜这里,但我想你想通过share()分享订阅。

当订阅已发布的observable的观察者数从0变为1时,我们连接到基础可观察序列。

添加第二个订阅者时,不会向其添加其他订阅 潜在的可观察序列。结果导致了操作 每个订阅者不会重复这些效果。

constructor() {
   this.observable = ....share()
}

getOptions() {
   return this.observable;
}