2017-03-25 3 views
2

FirebaseListObservableオブジェクトのコレクションを返すサービスコールがあります。私はこのような通常のJavaScript配列にそれぞれから特定の属性(ユーザー名)を追加しようとしています:角度2を使用してオブザーバブルオブジェクトからアトリビュートをアレーに追加するにはどうすればよいですか?

getUsernames(): string[] { 
var userNameArray = []; 
this.userList = this.service.getUsers(); 
this.userList.subscribe(
    users => { 
    users.map(user => 
     //console.log(user.userName) 
     userNameArray.push(user.userName) 
    ) 
    } 
); 
console.log(userNameArray[0]); 
return userNameArray; 

}

このライン

console.log(userNameArray[0]); 

プリントを "未定義"。これは、subscribeメソッドの非同期性のためですか?もしそうなら、私はこれをどのように克服するのですか?そうでない場合、値が配列に追加されないのはなぜですか?

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

編集:私はあなたがこのような何かを行うことができると思い

import { Injectable } from '@angular/core'; 
import { AngularFire, FirebaseListObservable } from 'angularfire2'; 
import { Observable } from 'rxjs/Observable'; 

    @Injectable() 
    export class TwitchDatabaseService { 
     userNames: FirebaseListObservable<any[]>; 
     constructor(private af: AngularFire) { 
     this.userNames = af.database.list('/userNames'); 
     } 


     getUsers(): FirebaseListObservable<any[]> { 
     return this.userNames; 
     } 
+2

はい明確にするために

は、ここFirebaseからデータを引き出し、サービスのコードがありますこれは、observableが非同期で、 'subscribe'コールバックがまだ呼び出されていないからです。 –

+0

それはsubscribeメソッドの非同期性のためですか? - >もちろんです –

+0

配列を返す前にサブスクリプションが終了していることを保証する方法はありますか? – dpberry178

答えて

-1

this.service.getUsers().subscribe(
    users => return users.map(user => user.userName) 
); 
+0

私はこれを動作させることができませんでした。私は根本的にこの問題に間違って近づいていると思いますが、Angular2の新機能ではこれを解決する最善の方法はわかりません。 – dpberry178

関連する問題