我在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();
答案 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;
})
}
然后调用者需要订阅返回值。