Angular 在继续之前,等待另一个可观察到的结果
我不知道我是否应该为此发布任何代码。但如果需要,我会的。我有一个Angular2指令,Angular 在继续之前,等待另一个可观察到的结果,angular,rxjs,Angular,Rxjs,我不知道我是否应该为此发布任何代码。但如果需要,我会的。我有一个Angular2指令,MyDirective和一个服务MyService 该服务在其构造函数中进行http调用,以获取某些内容并存储在saythis.list中 指令注入服务并将其用作myService.isPresent(item) 现在的问题是,当指令执行时,获取服务中列表的http调用尚未完成。是否有一种干净的方法使指令等待服务准备就绪?否,因为http调用始终是异步的,所以您不能同步等待它们 但是,您可以自己使用Reflec
MyDirective
和一个服务MyService
该服务在其构造函数中进行http调用,以获取某些内容并存储在saythis.list
中
指令注入服务并将其用作myService.isPresent(item)
现在的问题是,当指令执行时,获取服务中列表的http调用尚未完成。是否有一种干净的方法使指令等待服务准备就绪?否,因为http调用始终是异步的,所以您不能同步等待它们 但是,您可以自己使用
ReflectiveInjector
实例化服务,并在引导应用程序之前调用初始化,以确保所有内容都已加载
在bootstrap
调用中,只需向您的MyService
实例提供数据
//导入。。。从…起
从“/my.service”导入{MyService};
让injector=ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS,MyService]);
var myService:myService=injector.get(myService);
myService.init()
.订阅(数据=>{
引导(应用程序[
HTTP_提供商,
提供(MyService,{useValue:MyService})
])
.catch(err=>console.error(“error:,err));
});
在您的MyService
中添加此init
方法,为您的数据加载返回一个Observable
:
init():可通过工作示例观察
但这将导致多个http请求,对吗?我如何才能只发出一个http请求,并防止所有后续的loadData
调用被忽略(但在第一次调用完成后将其回调),从而使数据在整个运行时保持不变?是的,这只是一个获取和缓存的初始调用。也许有更好的方法?好吧,所以我试着做了一些东西来解决你的问题。我马上就要更新我的答案了。