Angular 2 http синхронный вызов - PullRequest
0 голосов
/ 26 апреля 2018

Может быть, вы найдете ответ в виде ссылки ниже, но он не отвечает на мой вопрос достаточно

https://stackoverflow.com/questions/38875375/how-to-make-synchronous-http-calls-in-angular-2

Что я хочу:

В ajax мы можем вызвать сервиспометив его как «async: false», следовательно, он будет синхронным, я хочу выполнить мой вызов веб-службы таким образом.согласно моему коду ниже, он работает как асинхронный, как сделать синхронный вызов, как после получения только полных значений, я хочу выполнить другие инструкции.

Как сделать синхронный вызов в angular 2, в моем случае у меня есть функция, которая вызывает java-сервис, и сервис возвращает некоторый объект JSON (список значений), используя этот список объектов, я делаю некоторыеманипуляции и составление таблицы.Здесь все работает нормально, но когда мой первый триггер когда-либо вызывает веб-сервис для рисования таблицы, он не рисует таблицу, потому что объект не возвращается с надлежащим JSON, но когда я запускаю действие во второй раз, он правильно отображаетЗначения в табл.Я считаю, что ответ веб-службы делает некоторую задержку, так как вызов асинхронный, это вызывает эту проблему.Следовательно, как мы можем сделать вызов таким образом, чтобы таблица отображалась правильно в соответствии с ответом JSON.

Мой код выглядит следующим образом:

Сценарий типа компонента:

 constructor(private service: VolumeHttpService)  {}
          temp: SomePojo[];
          public someFunciton(): void {
             this.service.getTableVal()
              .subscribe(temp=> this.temp= temp);
    //do some manipulations with temp data
        }

Сервисный текст:

getTableVal(): Observable<SomePojo[]> {
    return this.http.get<SomePojo[]>(serviceUrlAddress)
      .pipe(
      tap(rowData => '')
      );
  }

1 Ответ

0 голосов
/ 26 апреля 2018

Есть несколько решений вашей проблемы. Вы можете превратить ваш http-вызов в обещание и продолжить, только если ваш запрос вернул результат. Но, вероятно, лучше использовать канал async в html при рендеринге контента.

<div *ngFor="let t of temp | async">Name: {{ t?.name }}</div>

Предполагая, что объекты в temp имеют свойство name, только для примера.

В противном случае вы можете проверить, что ваши данные существуют, перед рендерингом

<div *ngIf="temp"><div *ngFor="let t of temp">Name: {{ t.name }}</div></div>
...