2017-07-06 18 views
0

関数から値を取得しようとしています。これは - 私がやろうとするものである:ファイルfavorite.tsでtypescript(ionic2)で関数から値を取得する方法

getUserFavsCount(userId: string){ 
 
    let count = 0; 
 
    let favs = this.af.list(`/favorites/${userId}`).subscribe(data =>{ 
 
     count = data.length; 
 
    }); 
 
    console.log(count) // getting the value. here it shows correct 
 
    return count; 
 
    
 
    }

、私profile.tsに - 私は、この値を取得しよう:

countUserFav() { 
 
    this.userProvider.currentUser.first().subscribe((currentUser: User) => { 
 
     console.log("---->",this.favoriteProvider.getUserFavsCount(currentUser.$key)); // here I get 0 value always :(
 
     this.myFavs = this.favoriteProvider.getUserFavsCount(currentUser.$key) 
 

 
    }); 
 
    }

私は間違っていますか?

+1

あなたは 'getUserFavsCount(からの約束を返す必要が)'あなたがfirebaseするための要求を作っているので、この情報がお役に立てば幸い

countUserFav() { this.userProvider.currentUser.first().subscribe((currentUser: User) => { this.favoriteProvider.getUserFavsCount(currentUser.$key).then(res =>{ this.myFavs = res; }); }); } 

あなたのデータを取得し、この

getUserFavsCount = (userId: string): Promise<number> => { // SINCE YOU RETURN A LENGTH, THEN THE PROMISE SHOULD RETURN A NUMBER // THERE'S NO NEED TO DECLARE A COUNT VARIABLE SINCE YOU'LL NOT USE IT return new Promise<number>(resolve =>{ let favs = this.af.list('/favorites/${userId}').subscribe(data =>{ resolve(data.length); }); }); } 

を試してみて、リクエストが完了したときにのみ、実際のカウントが得られます。だから 'getUserFavsCount'から' this.af.list( '/ favorites/$ {userId}') 'を返すことができ、' countUserFav'でそれを購読することができます。 – TheFallen

+0

ファレン、ありがとう!できます :) –

答えて

0

TheFallenは、約束を返す必要があるとコメントしています。常に約束を使用するか、同意問題が発生します。 D

関連する問題