在服务中链接observable并使用Typescript

时间:2017-02-02 14:08:12

标签: angular typescript firebase observable

平台 - Angualar 2 + TypeScript + 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文件中调用此函数,如下所示。目前,当我这样做时,我的订阅上有一个红色下划线

  

属性“subscribe”在类型“void

上不存在
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;
      });
  }

- - - - - - - - 更新 因为我来自swift,所以我不确定双回报会发生什么。一旦我添加它,我得到一个错误,如图所示。如果我不添加返回类型FirebaseObjectObservable(在我提到的开头返回之后,我在订阅时收到错误说“属性订阅在订阅类型上不存在。所以对我来说似乎函数实际上正在返回订阅而不是我可以订阅的firebaseObjectObservable。如何更改它以便我可以订阅它?

update

2 个答案:

答案 0 :(得分:1)

您应该在--verbose内返回方法调用,否则返回getUserInformation。这显然没有void方法......因为它是无效的:

subscribe

答案 1 :(得分:1)

你需要返回一些东西(如错误所示;-))

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