我不得不将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
}
...
}
答案 0 :(得分:1)
您可以使用HttpClient和async / await,如@JosefKatič所述
服务:
getJson() {
return this.http.get(url).toPromise();
}
组件:
async init() {
let data = await service.getJson();
}