我正在尝试确保在使用Angular 6和Typescript的应用程序启动之前加载了两项配置。我想从配置文件中检索API端点,然后使用该API端点检索一些权限。然后,这些权限决定了应该在屏幕上显示的内容,因此为什么我真的希望在应用程序之前加载它们。
我已经阅读了有关APP_INITALIZER won't delay initialization,Runtime configuration和Nested HTTP Requests的几篇文章 。但是,它们似乎都需要有一个config.service.ts来处理所需的所有配置加载。是不是最好的做法是让一个服务加载API终结点(以及其他配置),而让另一个服务访问API?
我整理了一个Plunker,该示例演示了检索信息的两个独立服务。控制台正在记录各个步骤。当前输出为:
AnnualDate
我希望您能看到代码正在尝试加载端点并试图使用它同时检索权限。实际加载应用程序后检索端点。我想检索api端点,然后加载权限,然后加载应用程序。所以所需的输出是:
going to load app settings
getting permissions
undefined (This is the api endpoint retrieved from the config file)
Angular is running in the development mode. Call enableProdMode() to enable the production mode.
got appsettings
我是Angular的新手,所以任何帮助或指针都将不胜感激。
编辑: 我找到了这个post,但我不明白解决方案。似乎有人可以帮助我取消选择吗?
答案 0 :(得分:0)
最后,我从hackernoon中汲取了灵感,并重新排列了我的诺言方式。我保留了单独的服务,但从appsettings服务中调用了权限服务。
app-settings.service.ts:
loadAppSettings() {
return (): Promise<any> => {
return new Promise((resolve, reject) => {
console.log('loadAppSettings:: inside promise');
setTimeout(() => {
console.log('loadAppSettings:: inside setTimeout');
this.permissionService.loadPermissions().then(x=> resolve());
}, 5000);
})
}
permissions.service.ts:
loadPermissions() {
return new Promise((resolve, reject) => {
console.log(`PermissionsService:: inside promise`);
setTimeout(() => {
console.log(`PermissionsService:: inside setTimeout`);
resolve();
}, 3000);
});
}