链接服务可观察到的,并在组件与打字稿

问题描述:

到底订阅

平台 - Angualar 2 +打字稿+ angularFire2链接服务可观察到的,并在组件与打字稿

里面我user.service.ts,我有以下的代码,以使第一请求到终点在firebase中找出一些路径信息。然后,我想使用该路径信息执行第二个查询来查找有关该用户的详细信息。

getUserInformation(uid: string) { 
    this.angularFire.database.object('/pathForUid/' + uid).subscribe(results => { 
     let path = results.path; 
     return this.angularFire.database.object('/uses/' + path) 
    }); 
    } 

我觉得这是这个代码的一个问题,因为如果我有返回类型FirebaseObjectObservable(这是什么database.object回报,)我得到以下错误

screen shot

我想要实现的是能够在我的login.component.ts文件中调用此函数,如下所示。目前,当我这样做,我得到一个红色下划线上我的订阅说

财产“订阅”上键入“无效

onLogin() { 
    this.loading = true; 
    this.userService.loginWithEmailPassword(this.loginForm.value.email, this.loginForm.value.password) 
     .then(
     data => { 
     this.alertService.success('Login successful', true); 
     console.log('Login successful', data) 

     // This is what I want to achieve 
     this.userService.getUserInformation(data.uid).subscribe(result => { 
      console.log(result) 
     }); 

     //this.router.navigate(['/login']); 
     this.loading = false; 
     }, 
     error => { 
     this.alertService.error(error.message); 
     console.log('Error occured', error) 
     this.loading = false; 
     }); 
    } 

----- Update--不存在--- 我不确定发生了什么,因为我是从swift来的double return,只要我添加它,就会出现如图所示的错误,如果我不添加返回类型FirebaseObjectObservable(在I如你所提到的那样在开始时输入回报,我在订阅时遇到错误:“在订阅类型中不存在属性订阅,所以对我来说似乎是fu nction实际上是返回订阅而不是firebaseObjectObservable,我可以订阅。我如何改变它以便我可以订阅它?

update

+0

请张贴代码和错误消息文本而不是屏幕截图。额外的屏幕截图非常棒,但屏幕截图不可搜索。 –

你需要返回的东西(如错误说;-))

getUserInformation(uid: string): FirebaseObjectObservable<any> { 
    return this.angularFire ... 
+0

嗨Gunter,感谢您的回应。我已经尝试了几件事,请参阅我的更新问题 – user172902

+0

如果您想返回'Observable',您不能调用'subscribe()',因为' subscribe()'返回一个'Subscription'',如果你用'map'替换'subscribe',你应该得到你想要的东西 –

+0

神奇的函数图是多么的好,谢谢。 – user172902

您应该返回getUserInformation里面的方法调用,否则返回void。这显然不具有subscribe方法..是它是无效:

getUserInformation(uid: string): FirebaseObjectObservable<any> { 
    return this.angularFire.database.object('/pathForUid/' + uid).subscribe(results => { 
     let path = results.path; 
     return this.angularFire.database.object('/uses/' + path) 
    }); 
} 
+0

嘿伙计。谢谢回复。请看我更新的问题。我不知道我是如何迅速从双回归中发生的。如果我不添加返回类型FirebaseObjectObservable (在我如上所述在开始处输入返回值之后,我在订阅时遇到错误:“类型订阅中不存在属性订阅,因此对我来说,函数似乎返回订阅,而不是firebaseObjectObservable user172902