Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在继续之前,等待另一个可观察到的结果_Angular_Rxjs - Fatal编程技术网

Angular 在继续之前,等待另一个可观察到的结果

Angular 在继续之前,等待另一个可观察到的结果,angular,rxjs,Angular,Rxjs,我不知道我是否应该为此发布任何代码。但如果需要,我会的。我有一个Angular2指令,MyDirective和一个服务MyService 该服务在其构造函数中进行http调用,以获取某些内容并存储在saythis.list中 指令注入服务并将其用作myService.isPresent(item) 现在的问题是,当指令执行时,获取服务中列表的http调用尚未完成。是否有一种干净的方法使指令等待服务准备就绪?否,因为http调用始终是异步的,所以您不能同步等待它们 但是,您可以自己使用Reflec

我不知道我是否应该为此发布任何代码。但如果需要,我会的。我有一个Angular2指令,
MyDirective
和一个服务
MyService

该服务在其构造函数中进行http调用,以获取某些内容并存储在say
this.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
调用被忽略(但在第一次调用完成后将其回调),从而使数据在整个运行时保持不变?是的,这只是一个获取和缓存的初始调用。也许有更好的方法?好吧,所以我试着做了一些东西来解决你的问题。我马上就要更新我的答案了。