我需要在角度初始化之前一个接一个地进行两次HTTP调用。有没有办法同步初始化角度2?
请不要说我们的应用应该异步工作。 我正在使用“angular-cli”进行通用构建。首先,我需要获取在json文件中设置的环境,并根据该环境我需要加载配置。所以我需要两个HTTP调用。
{
provide: APP_INITIALIZER,
useFactory: (config: AppConfig) => () => config.load(),
deps: [AppConfig], multi: true
}
内部加载()我在其他内部有两个http调用,但在两次调用之前,完成了初始化的角度。
答案 0 :(得分:3)
你的方式正确。 您可以将两个http调用到config.load()函数。
public load() {
return new Promise((resolve, reject) => {
this.http.get('first.json').map( res => res.json() ).catch((error: any):any => {
console.error('Error at first call');
resolve(error);
return Observable.throw(error.json().error || 'Server error');
}).subscribe( (firstResponse) => {
let request = this.http.get('second.json');
request
.map( res => res.json() )
.catch((error: any) => {
console.error('Error at second call');
resolve(error);
return Observable.throw(error.json().error || 'Server error');
})
.subscribe((secondResponse) => {
//Here i have both
firstResponse, secondResponse
resolve(true);
});
});
});
}
考虑到useFactory
不再支持函数和lambda的事实,所以你必须重写一点。还要确保提供AppConfig
function initialConfigLoad(config: AppConfig) {
return () => config.load();
};
providers: [
...
AppConfig, // <- Provide AppConfig
{
provide: APP_INITIALIZER,
useFactory: initialConfigLoad,
deps: [AppConfig],
multi: true
}
]