2016-11-08 38 views
7

'da Gözlemlenebilir bir dizinin bir öğesi nasıl bulunur Http sözlerinin yerine Gözlemlenebilir'i kullanmaya karar verdim.Angular2

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)); 

    } 

} 

Önce filmlerin bir dizi getir, ben kimliği tarafından dizinin belirli bir film bulmak daha:

Bu benim Promise servisi baktım nasıl. Ancak Gözlemlenebilir ile aynı şeyi yapmaya çalıştığımda, bulmak için bir hata bildirimi alıyorum: 'Bulma' özelliği 'Film []' türünde yok. İşte

Ben gözlemlenebilir hizmetiyle çalıştı budur:

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)); 
    } 
} 

nasıl sadece benim Promise hizmetinde gibi benim gözlemlenebilir hizmetinde aynı işlevselliği elde edebilirsiniz?

+1

* Property 'bulmak' türüne yok 'Film [] * olan tip hata döndürür subscribe ait map yöntemi kullanmalısınız varsayalım çünkü TS yapılandırması yanlış. Lib: ['es6'] 'seçeneği olmalıdır. – estus

+0

Haklısınız. Bunu değiştirdim ve şimdi bulmakla işe yarıyor. Teşekkürler. – GaborH

cevap

6

Ben, bunun yerine Subscription nesneyi

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

Bunu da düşündüm, çünkü bu işlevi başka bir bileşenden aradığımda abone olmak zorundayım. Ancak harita ile aynı hatayı veriyor. – GaborH

+0

Nasıl kullanıyorsunuz? – yurzui

+0

Hata ve/veya stacktrace'i gönderebilmeniz yararlı olur. – Siri0S