2017-02-12 1 views
0

좋아, 그래서 firebase를 호출하고 주어진 위치에있는 자식을 반환합니다.메소드에서 배열 <custom class>를 반환하십시오.

descriptionid이 작동하며, 콘솔에 options을 기록하고 항목을 볼 수 있으므로 반환 된 값을 반복하고 사용자 정의 클래스를 채 웁니다. 내가 가진

문제가 존재하는 코드로 내 구성 요소에이 방법에서 값을 반환하려고하면 다음과 같다 : 리턴 라인에

getIntent(): Promise<Array<Dropdown>> { 

    const options: Dropdown[] = []; 
    var d = this.af.database.list('/option1').subscribe(items => { 
     items.forEach(item => { 
      options.push({ 
       id: item.$key, 
       description: item.$value 
      }) 
      return false; 
     }); 
    }); 

    return options; 

} 

는 현재 다음과 같은 오류로 밑줄 :

Type 'Dropdown[]' is not assignable to type 'Promise<Dropdown[]>'. Property '[Symbol.toStringTag]' is missing in type 'Dropdown[]'.

나는 시도했다 :

return options as Promise<Array<Dropdown>>; 

하지만 슬프게도 작동하지 않습니다. 누군가이 드롭 다운 옵션을 반환하기 위해이 함수를 사용하는 방법에 대해 알 수 있습니다.

(!) 참고 : 현재 angularfire2를 사용하여 너무

답변

1
import 'rxjs/add/operator/map'; 

getIntent(): Observable<Dropdown[]> { 

    return this.af.database.list('/option1') 
    .map(items => items 
     .map(({$key, $value}) => ({ 
     id: $key, 
     description: $value 
     }) 
    ); 

} 

당신은 다음 몇 가지 구성 요소에서이 방법을 구독합니다.

귀하의 질문에 이라는 class을 사용하는 것이 좋습니다. 우리는이를 인스턴스화하지 않습니다. Dropdown이 실제로 class으로 선언 된 경우 instanceof 검사를 실수로 수행 할 수 없도록 interface으로 변경하는 것이 가장 좋습니다. `[TS] 유형 ' 관찰 가능한'는되지 않습니다 :

export interface Dropdown { 
    id: string; // maybe number? 
    description: string; 
} 
+1

헤이 제안을 위해, 그러나 나는 다음과 같은 오류를 받고 있어요 감사

export class Dropdown { id: string; // maybe number? description: string; } 

후 전 'Promise '을 입력 할 수 있습니다. '[Symbol.toStringTag]'속성이 'Observable '유형에 없습니다. " –

+0

올바르지 않습니다. database.list에서 어떤 유형이 반환됩니까? 이미 약속이라면 다른 접근법이 필요합니다. –

+0

나는 당신의 질문에 대해 잘 모르겠다. 두 필드 설명과 ID로 구성된 Dropdown 클래스의 배열을 만들고있다. 그러므로 원래의 질문에있는 코드. 나는 이것을 다시 돌려주고 싶다. database.list? ??? –

관련 문제