2017-01-26 48 views
1

私はAngular 2プロジェクトで、ユーザーがログインしているかどうかをチェックする簡単なサービスを作った。ユーザーオブジェクトがFirebaseAuthオブジェクト内に存在するかどうかをチェックします。しかし、実際に私のreturn文がauth変数のsubscribeメソッドの中にあるとき、関数宣言は "return文がない"というエラーを投げます。Tsエラー:宣言された型が 'void'でも 'any'でもない関数は、値を返す必要があります。 return文が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; 
    }) 
    } 
} 

:コードは次のようなものになります「のチェックを():ブール」ステートメントは、このエラーがスローされます

イムコンポーネント でのOnInitライフサイクルフック内部の私の関数を呼び出すと、変数

に代入上記のコード return xxx
this.loggedIn = this.CheckLogged.check(); 

答えて

5
check(): boolean{ // <<<== no boolean is returned from this function 
    this.auth.subscribe((user: FirebaseAuthState) => { 
     if (user) { 
      return true; 
     } 
     return false; 
    }) 
    } 

のみsubscribe(...)に渡されるコールバックからの戻りが、Rしませんetehからcheck

非同期から同期に切り替えることはできません。 方法は

check(): Observable<boolean>{ // <<<== no boolean is returned from this function 
    return this.auth.map((user: FirebaseAuthState) => { 
     if (user) { 
      return true; 
     } 
     return false; 
    }) 
    } 

のようになります。その後、呼び出し側は戻り値をサブスクライブする必要があります。

+0

チャームのように働いた!ありがとう、たくさんの仲間。 –

+0

ようこそ。あなたがそれを働かせることを聞いてうれしい:) –

関連する問題