Как сделать пример про http с синхронным в Angular2?

angular

1436 просмотра

1 ответ

6 Репутация автора

Как сделать пример про http с синхронным в Angular2?

Я попробовал, как показано ниже, в компоненте:

getAllAddress(){
    this.addressService.getAllAddress().then(`enter code here`
            result => {
                this.data = result.list;
                this.onChangeTable(this.config, null);
                console.log('FIRST');
            }
        );
    console.log('LAST');
}

В сервисе:

public getAllAddress(){
    return this.__http.get('LOCATION')
    .map((res) => {
    return res.json()
    })
    .toPromise();
}

Но журнал консольного шоу «LAST» перед «FIRST».

Автор: Vishnu Источник Размещён: 18.07.2016 09:13

Ответы (1)


1 плюс

159583 Репутация автора

Фактически, вы не можете загружать данные синхронно в браузере, так как базовый API ( XMLHttpRequest) является асинхронным.

При этом вы можете предварительно загрузить данные, если ваши данные являются справочными или конфигурационными. В этом случае вы можете использовать APP_INITIALIZERсервис. Приложение будет ожидать разрешения возврата, прежде чем оно будет запущено.

Вот образец:

provide(APP_INITIALIZER, {
  useFactory: (service:GlobalService) => () => service.load(),
  deps:[GlobalService, HTTP_PROVIDERS], multi: true
})

loadМетод хотел бы что - то вроде этого:

load():Promise<Site> {
  var promise = this.http.get('config.json').map(res => res.json()).toPromise();
  promise.then(config => this.devServer = config.devServer);
  return promise;
}

Тогда вы можете напрямую использовать devServer(синхронно) ...

Автор: Thierry Templier Размещён: 18.07.2016 09:17
Вопросы из категории :
32x32