рендеринг привязанного {{stuff}} к набору свойств в подписке Observable задерживается на несколько секунд в Angular - PullRequest
0 голосов
/ 13 мая 2018

В моей разметке у меня есть следующий итератор.

<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 секунд, прежде чем оно изменится!

Я не могу сказать, о чем это из-за невежества, но это настолько странное явление, что я предполагаю, что кто-то более компетентный узнает это и предложит что-то умное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...