2017-03-25 3 views
2

FirebaseListObservable 개체의 컬렉션을 반환하는 서비스 호출이 있습니다. 이 같은 일반적인 자바 스크립트 배열로 각에서 특정 속성 (사용자 이름)을 추가하려고 :각도 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]); 

인쇄를 "정의되지 않은". 구독 방식의 비동기 특성 때문입니까? 그렇다면 어떻게 이것을 극복 할 수 있습니까? 그렇지 않다면 배열에 값이 추가되지 않는 이유는 무엇입니까?

도움 주셔서 감사합니다.

편집 :

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

명확성을 위해

, 여기 중포 기지에서 데이터를 가져옵니다 서비스에 대한 코드는 observable이 비동기 적이기 때문에'subscribe' 콜백이 아직 호출되지 않았기 때문입니다. –

+0

구독 방식의 비동기 특성 때문입니까? -> 물론 그렇습니다 –

+0

배열을 반환하기 전에 구독이 완료되었는지 확인할 수있는 방법이 있습니까? – dpberry178

답변

-1

난 당신이 이런 식으로 뭔가 할 수 있다고 생각 : : 예

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

나는 이것을 작동시킬 수 없었다. 나는 근본적으로이 문제에 근본적으로 접근하고 있다고 생각하지만, Angular2에 익숙하지 않은 나는 이것을 풀 수있는 최선의 방법이 확실하지 않다. – dpberry178