2017-09-20 19 views
0

私はこれを理解できないようです。私はDataService(a.k.a. ds)とコンポーネントを持っています。このコンポーネントは、関数doesUserExist()を呼び出します。角4関数戻り値ブール値=未定義

console.log("boolean="+this.ds.doesUserExist()); 

これは常に定義されていません。

doesUserExist(){ 
    var bool:boolean; 
    var myvars = this.af.list('/accounts/'+this.uid) as FirebaseListObservable<Listing[]>; 

    myvars.subscribe(data=>{ 
      console.log("length="+data.length) 
      if (data.length===0){ 
      bool = false;   
      }  
     }) 
     return bool; 

     } 

私はあまりにもパブリック変数としてvar bool:booleanを入れてみましたが、関係なく、何が起こるか、これは未定義来ない:ここでのDataService内の関数です。

私もvar bool:boolean=trueを設定し、それがまだ上記の指定につきtruefalseとしてブール値(私はにconsole.logを経由してチェックしました)上記、代わりに戻ってくるのif文で偽等しくなります。

だから私はこれで間違っているのですか?私は周りに検索したと私が試した:

Boolean([return bool])が、コードは私もif文でreturnsを入れてみましたその

が好きではありません。それは動作しません。

ありがとうございました!

+1

可能な重複https://stackoverflow.com/questions/43055706/how-do-i-return-the -response-from-observable-http-async-call-in-angular2) – n00dl3

答えて

0

あなたはboolを定義しておらず、あなたのサブスクリプションでは渡していません(非同期なので、後で答えが出る可能性があります)ので、boolを返すと値はありません。

あなたの機能は応答の長さに基づいているため、そのブール値を削除することができます。

doesUserExist(): Observable<boolean> { 
    var myvars = this.af.list('/accounts/'+this.uid) as FirebaseListObservable<Listing[]>; 

    return myvars.subscribe(data=>{ 
     console.log("length="+data.length) 
     return data.length === 0; // true if that's the case, or false 
    }) 
    } 
[私はangular2において観察/ HTTP /非同期呼び出しからの応答を返すにはどうしますか?](の
+0

'doesUserExist'関数が何かを返すのを見ません。 – yurzui

+0

戻り値を忘れました、ありがとう! –

+0

これは私がやったことです。ブール値をtrueに設定しましたが、IF文がfalseに変わってもtrueに戻ります。あなたはデータが非同期であると述べました。このサイトがすべて正常に動作するには数秒かかる場合がありますか?それとも、データサービスからの応答が得られる前に、その関数が要求され、コンポーネント内で処理されているのか(私の答えを考えた後) – Groovdafied

関連する問題