Rxjs如何调用冷观测值

Rxjs如何调用冷观测值,rxjs,angular2-http,angular2-observables,Rxjs,Angular2 Http,Angular2 Observables,打击代码来自中的bookexist route guard 我知道它正在调用googleBooks服务发出http请求,并检查该书是否已经在商店中。我不明白的是,它没有在guard服务的任何地方调用subscribe。我的理解是,Anuglar2中的http可观察对象被视为冷可观察对象,这意味着在有人订阅它之前,它们不会被调用 我的问题是:如何调用下面的googleBooks服务 hasBookInApi(id:string):可观察{ 返回此.googleBooks.retrieveBook(

打击代码来自中的bookexist route guard 我知道它正在调用
googleBooks
服务发出http请求,并检查该书是否已经在商店中。我不明白的是,它没有在guard服务的任何地方调用
subscribe
。我的理解是,Anuglar2中的http可观察对象被视为冷可观察对象,这意味着在有人订阅它之前,它们不会被调用

我的问题是:如何调用下面的googleBooks服务

hasBookInApi(id:string):可观察{
返回此.googleBooks.retrieveBook(id)
.map(bookEntity=>newbook.LoadAction(bookEntity))
.do((操作:book.LoadAction)=>this.store.dispatch(操作))
.map(book=>!!book)
.catch(()=>{
这个.router.navigate(['/404']);
归还(假);
});
}

它是通过由以下内容组成的可观察对象调用的:

/**
*这是当我们的守卫运行时路由器将调用的实际方法。
*
*我们的警卫等待集合加载,然后检查我们是否需要
*从API请求一本书,或者如果我们的缓存中已经有了它。
*如果它在缓存或API中找到它,它将返回一个可观察的
*设置为'true',并成功呈现路由。
*
*如果在我们的缓存或API中找不到它,这个警卫
*将返回一个可观察的'false',导致路由器移动
*进入下一条候选路线。在这种情况下,它将继续前进
*转到404页。
*/
canActivate(路由:ActivatedRouteSnapshot):可观察{
返回此。waitForCollectionToLoad()
.switchMap(()=>this.hasBook(route.params['id']);
}
是一个角度接口,由路由器调用。
CanActivate
的实现可以返回可观察、承诺或布尔值。当它返回一个可观察对象时,路由器会订阅它——它会看到对它内部组成的可观察对象的订阅,并最终订阅由您的问题中包含的hasBookInApi返回的可观察对象