繁体   English   中英

Ts错误:声明的类型既不是'void'也不是'any'的函数必须返回一个值。 当return语句在订阅方法中时

[英]Ts Error : A function whose declared type is neither 'void' nor 'any' must return a value. when return statements are inside a subscribe method

我在Angular 2项目中做了一个简单的服务,用于检查用户是否登录。 它检查FirebaseAuth对象中是否存在用户对象。 但是,当我的return语句实际上位于auth变量的subscription方法内时,函数声明会为“缺少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();
  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;
    })
  }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM