У меня есть этот кусок кода, который вызывается из компонента:Почему последний вызов выполняется 3 раза?
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));
1-ый вызов, чтобы предупредить печать должным образом («не определено», «5» , «15»), но второй печатает «15» 3 раза. Почему это происходит? Он работал нормально, но некоторые изменения, которые я сделал (и не смог отслеживать), изменили это, и я не могу его исправить.
Hi Luis. Ваш код выглядит свернутым. У вас есть функция, создающая obsA, а затем подписываясь на obsB, чтобы испускать значения на obsA, а затем, наконец, возвращает obsC, который обертывает obsA .... Конечно, это может быть упрощено. Можете ли вы описать ** концептуально **, что должна выполнить ваша функция 'choose()'? – AngularChef
PickQuality имеет объект (полученный по HTTP-запросу GET), связанный с оценкой. Моя функция getOption() извлекает массив из них и выбирает (n?), Как предполагается, возвращать подматрицу n размера, отсортированную по этим баллам. –