Javascript 角度同步XMLHttpRequest加载资产的JSON

Javascript 角度同步XMLHttpRequest加载资产的JSON,javascript,angular,xmlhttprequest,assets,Javascript,Angular,Xmlhttprequest,Assets,我必须使用JSON文档作为资产,因此我将其放在 src/assets 文件夹。我需要在应用程序启动时加载这个JSON文档,它必须是一个同步操作,因为这个JSON的内容用于正确初始化其他应用程序的组件 我所做的是使用XMLHttpRequest,因为角度HttpClient是完全异步的 const xmlHttp = new XMLHttpRequest() xmlHttp.open('GET', this.assetUrl, false) <-- false to produce

我必须使用JSON文档作为资产,因此我将其放在

src/assets 
文件夹。我需要在应用程序启动时加载这个JSON文档,它必须是一个同步操作,因为这个JSON的内容用于正确初始化其他应用程序的组件

我所做的是使用XMLHttpRequest,因为角度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)

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

服务:

getJson() {
    return this.http.get(url).toPromise();
}
组成部分:

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

它必须是一个同步操作,因为这个JSON的内容用于正确初始化其他应用程序的组件,我不确定tbh的情况是否如此;为什么不能初始化成功回调中的其他组件旁注:另一种方法是使用var config={…},在服务器上的main index.html中包含JSON;所以它不必加载。@ChrisG我在问题中添加了更多信息。您现在应该能够更好地获得上下文。您可以使用async/await和HttpClient解决它。如果我理解的很好,我不认为这需要同步请求。加载配置->异步完成后,使用加载的url实例化HttpMyService。我不是说这是一个简单的改变,我是说这很容易实现。@JosefKatič如果您认为将HttpClient返回可观察转换为承诺并使用async/Wait可能会有所帮助,请随时回答这个问题。我很乐意接受每一个建议。
async init() {
    let data = await service.getJson();
}