在我的应用程序中,有角度2服务可以说"配置服务"返回RxJS Observable序列。该序列包含配置数据。在订阅此序列时,它返回数据,但返回的数据是异步的。在正常情况下,可能需要异步调用,但是在一个特定情况下,我需要获得此配置数据"同步"因为没有那个配置从服务执行流返回的数据无法继续。有什么方法可以用可观察的序列进行阻塞调用,这样我仍然可以使用这个现有的配置服务吗?我的代码如下所示:
this.configService.getConfigData()
.subscribe(
x=>{
this.ConfigData = x;
},
e=>console.log(e)
);
答案 0 :(得分:1)
没有办法同步转动。
您可以考虑的方法是在引导应用程序之前加载配置数据。因此,当应用程序启动时,它们将在那里。
以下是不同的可能方法:
您可以在请求完成后异步引导。这是一个示例:
var app = platform(BROWSER_PROVIDERS)
.application([BROWSER_APP_PROVIDERS, appProviders]);
var service = app.injector.get(ConfigService);
service.loadConfig().flatMap((config) => {
var configProvider = new Provider('config', { useValue: config });
return app.bootstrap(appComponentType, [ companiesProvider ]);
}).toPromise();
看到这个问题:
如果您能够在服务器端更新index.html
页面(主入口点),我会看到另一种方法。这是一个示例:
<script>
var params = {"token": "@User.Token", "xxx": "@User.Yyy"};
System.import('app/main').then((module) => {
module.main(params);
});
</script>
看到这个问题:
您还可以为此注册APP_INITIALIZER
提供商:
provide(APP_INITIALIZER, {
useFactory: (service:ConfigService) => () => service.loadConfig(),
deps:[ConfigService, HTTP_PROVIDERS],
multi: true}),
有关详细信息,请参阅此问题: