angular - 当返回语句在订阅方法中时出现 Ts 错误 : A function whose declared type is neither 'void' nor 'any' must return a value.

标签 angular typescript firebase

我在我的 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/

相关文章:

php - Laravel 5.4 护照 : unsupported_grant_type

Angular 2 : ngDestroy called for component which is ngFor-ed and its reference has changed

android - Ionic 3 - 添加插件到 build.gradle 文件

typescript - "all legal JavaScript is legal TypeScript"是什么意思?

node.js - 如何在 Typescript 中重新导入模块

ios - 如何使用 Firebase 在 iOS 上验证用户的电子邮件地址?

python - Firebase python,访问用户数据

具有带连字符的属性的 Angular 2 关键帧动画

angular - 异步自定义验证器无法正常工作并在 Angular 8 中显示错误消息

typescript - 联合函数类型的可赋值性规则