作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在我的 Angular 2 项目中做了一个简单的服务来检查用户是否登录。它检查用户对象是否存在于 FirebaseAuth 对象中。但是当我的 return 语句实际上在 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 生命周期 Hook 中调用我的函数并将其分配给一个变量
this.loggedIn = this.CheckLogged.check();
最佳答案
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;
})
}
然后调用者需要订阅返回值。
关于angular - 当返回语句在订阅方法中时出现 Ts 错误 : A function whose declared type is neither 'void' nor 'any' must return a value.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878372/
我是一名优秀的程序员,十分优秀!