Angular - синхронный XMLHttpRequest для загрузки JSON активов - PullRequest
0 голосов
/ 27 февраля 2019

Мне пришлось использовать документ JSON в качестве актива, поэтому я поместил его в папку

src/assets 

.Мне нужно загрузить этот JSON документ при запуске приложения, и это должна быть синхронная операция, поскольку содержимое этого JSON используется для правильной инициализации других компонентов приложения.

Что я сделал, так этоиспользуйте XMLHttpRequest, так как Angular HttpClient является полностью асинхронным.

const xmlHttp = new XMLHttpRequest()
xmlHttp.open('GET', this.assetUrl, false)   <-- false to produce a synchronous call
xmlHttp.send()

const configuration = xmlHttp.responseText
return JSON.parse(configuration)

Однако консоль браузера выдает предупреждение

[Устаревание] Синхронный запрос XMLHttpRequest в основном потокеустарел из-за его пагубных последствий для конечного пользователя.

Могу ли я по-прежнему использовать этот фрагмент кода или мне следует подумать о чем-то еще?
Поскольку папка ресурсов заполненаприменение, нет вредного эффекта, я полагаю.


Дополнительная информация.Этот вопрос задается после этого .
Например, документ JSON содержит URL, и его следует использовать таким образом

@Injectable()
export class HttpMyService {
   private readonly baseUrl: string
   ...

   public constructor(
      configurationService: ConfigurationService,
      private readonly httpClient: HttpClient,
      private readonly logger: NGXLogger
   ) {
      // Get url from JSON document inside assets 
      this.baseUrl = configurationService.getConfigurationSync().url
   }

   ...
}

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать HttpClient и async / await, как упомянуто @Josef Katič

service:

getJson() {
    return this.http.get(url).toPromise();
}

компонент:

async init() {
    let data = await service.getJson();
}
...