2016-11-08 6 views
7

私はHttp約束の代わりにObservableを使うことに決めました。Angular2でObservableでidの配列の要素を見つける方法

私の約束サービスが見えた方法です:

export class MovieService { 

    movies: Movie[] 
    movie: Movie; 
    constructor(private http:Http) { } 

    getMovies(): Promise<Movie[]>{ 

     return this.http.get('http://api.request.com') 
      .toPromise() 
      .then((res:Response) => res.json()['results']) 

    } 
    getMovie(id: number): Promise<Movie> { 
     return this.getMovies() 
      .then(movies => movies.find(movie => movie.id == id)); 

    } 

} 

まず私は映画の配列を取得し、私は、IDで配列の特定の映画を見つけるより。しかし、私がObservableで同じことをしようとすると、findのエラー通知が出ます:プロパティ 'find'は型 'Movie []'に存在しません。ここで

は私が観察サービスと試みたものです:

export class MovieService { 

    movies: Movie[]; 
    movie: Movie; 

    constructor(private http: Http) { 
    } 

    getMovies(): Observable<Movie[]> { 

     return this.http.get('http://api.request.com) 
      .map((res: Response) => res.json()['results']); 
    } 

    getMovie(id: number): Observable<Movie> { 
     return this.getMovies() 
      .subscribe(movies => movies.find(movie => movie.id == id)); 
    } 
} 

どのように私はちょうど私の約束サービスのように、私の観察可能なサービスで同じ機能を実現することができますか?

+1

*プロパティ '検索' のタイプに存在しません[ムービー[] *は型エラーを返すsubscribemapメソッドを使用する必要がありますと仮定しますTS構成が間違っているためです。 'lib:['es6']'オプションが必要です。 – estus

+0

あなたは正しいです。私はそれを変更し、それは今見つけると動作します。ありがとう。 – GaborH

答えて

6

私は、あなたの代わりにSubscriptionオブジェクト

export class MovieService { 
    movies: Movie[]; 
    movie: Movie; 

    constructor(private http: Http) {} 

    getMovies(): Observable<Movie[]> { 
    return this.http.get('http://api.request.com') 
     .map((res: Response) => res.json()['results']); 
    } 

    getMovie(id: number): Observable<Movie> { 
    return this.getMovies() 
     .map(movies => movies.find(movie => movie.id == id)); 
    } 
} 

Plunker Example

+0

私は購読しなければならないので、他のコンポーネントからその関数を呼び出すと、そのことも考えました。しかし、それはマップで同じエラーを返します。 – GaborH

+0

どのように使用しますか? – yurzui

+0

エラーやスタックトレースを投稿すると便利です。 – Siri0S

関連する問題