Ts错误:声明类型既不是'无效的函数。也没有任何'必须返回一个值。当return语句在subscribe方法中时

时间:2017-01-26 16:33:39

标签: angular typescript firebase

我在Angular 2项目中提供了一项简单的服务,用于检查用户是否已登录。它检查FirebaseAuth对象中是否存在用户对象。但是函数声明会为"缺少return语句而引发错误"实际上我的返回语句在auth变量的subscribe方法中。代码看起来像这样:

import { Component, OnInit , Injectable} from '@angular/core';
import { FirebaseAuthState, FirebaseAuth} from "angularfire2";
@Injectable()
export class CheckLogged {

constructor(private auth:FirebaseAuth ){}
check(): boolean{
    this.auth.subscribe((user: FirebaseAuthState) => {
        if (user) {
            return true;  
        }
        return false;
    })
  }
}

" check():boolean"语句抛出此错误

我在组件中的OnInit生命周期钩子中调用我的函数 并将其分配给变量

this.loggedIn = this.CheckLogged.check();

1 个答案:

答案 0 :(得分:6)

  check(): boolean{ // <<<== no boolean is returned from this function
    this.auth.subscribe((user: FirebaseAuthState) => {
        if (user) {
            return true;  
        }
        return false;
    })
  }

在上面的代码return xxx中,只会从传递给subscribe(...)的回调中返回,但不会从check返回。

您无法从异步切换回同步。 该方法应该看起来像

  check(): Observable<boolean>{ // <<<== no boolean is returned from this function
    return this.auth.map((user: FirebaseAuthState) => {
        if (user) {
            return true;  
        }
        return false;
    })
  }

然后调用者需要订阅返回值。