В моей разметке у меня есть следующий итератор.
<div class="...">
<div *ngFor="let thing of stuff">{{thing}}</div>
</div>
На каждом набираемом ключе есть метод, обновляющий заднее поле stuff , которое вызывается. Часть, которую я не могу объяснить, - это удивление, что она работает, но задерживается в зависимости от источника данных, выбираемых для заполнения заднего поля.
onTypingThatWorksButDelayed(text: string) {
this.thing = text;
this.service.getStuff(this.thing)
.subscribe(next => {
this.stuff = next;
console.log(this.stuff);
});
}
onTypingThatWorksImmediately(text: string) {
if (text === "beep")
this.stuff = ["uno", "duo"];
else
this.stuff = ["shabaroo"];
}
Сам сервис спроектирован по следующим направлениям (и, конечно, он занимает около секунды, чтобы прочитать API карт, что, как я ожидал, не вызовет никаких проблем, потому что я работаю с Observable . Я понял, что при этом внутренние процессы Angular остановятся и будут ждать получения значения.
getStuff(thing: string): Observable<string[]> {
return new Observable<string[]>(_ => {
const coder = new google.maps.Geocoder()
.geocode({ ... }, (
results: google.maps.GeocoderResult[],
status: google.maps.GeocoderStatus) => {
let output = [];
if (status === google.maps.GeocoderStatus.OK)
output = results.map(...);
_.next(output);
_.complete();
});
});
}
Я ошибаюсь относительно цели Наблюдаемый ? Можно ли связать полевой итератор, чтобы он немедленно обновлялся (поскольку выходные данные консоли содержат самые последние данные, я знаю, что они есть в клиенте)?
редактировать
К моему большому удивлению, я заметил, что обновление {{stuff}} элемента действительно происходит . Дело в том, что на это уходит несколько секунд. Обратите внимание: свойство сразу же получает новое значение (это подтверждается консологологией, когда ясно, что обновление присутствует. Однако отображаемое значение в двойных фигурных скобках занимает, может быть, 8 или 12 секунд, прежде чем оно изменится!
Я не могу сказать, о чем это из-за невежества, но это настолько странное явление, что я предполагаю, что кто-то более компетентный узнает это и предложит что-то умное.