Angular-同步XMLHttpRequest加载资产的JSON

时间:2019-02-27 09:14:43

标签: javascript angular xmlhttprequest assets

我不得不将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)

但是浏览器控制台会发出警告

  

[Deprecation]主线程上的同步XMLHttpRequest是   不推荐使用,因为它对最终用户的有害影响   经验。

我仍然可以使用这段代码,还是应该考虑其他事情?
我认为,由于资产文件夹中装有该应用程序,因此没有不利影响。


其他信息。这个问题在this one之后出现。
例如,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 :(得分:1)

您可以使用HttpClient和async / await,如@JosefKatič所述

服务:

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

组件:

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