我在Angular 2项目中提供了一个简单的服务,用于检查用户是否已登录.它检查FirebaseAuth对象中是否存在用户对象.但是当函数声明实际上我的返回语句在auth变量的subscribe方法内时,函数声明会为"缺少return语句"抛出一个错误.代码看起来像这样:
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();
Günter Zöchb.. 7
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{ // <<<== no boolean is returned from this function return this.auth.map((user: FirebaseAuthState) => { if (user) { return true; } return false; }) }
然后调用者需要订阅返回值.
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{ // <<<== no boolean is returned from this function return this.auth.map((user: FirebaseAuthState) => { if (user) { return true; } return false; }) }
然后调用者需要订阅返回值.