Как конвертировать вызов Http? - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно преобразовать этот устаревший запрос get http в Angular 6. У меня ошибка:

JSON не является функцией

. Это мой код:

search(query: string): Observable < YoutubeSearchResult > {
    const params: string =[
        `q=${query}`,
        `key=${this.apikey}`,
        `part=snippet`,
        `type=video`,
        `maxResult=10`
    ].join('&');

    const queryUrl = `${this.apiurl}?${params}`;
    //  const queryUrl = "";


    /**ritorna richiesta http get oppure con Httpclient (POST,DELETE,GET), usp map per il Response
     * e estraggo l'oggetto usando.json e itero il risultato e lo converto in SearchResult
     */

    return this.http.get(queryUrl).map((response: Response) => {

        return (<any>response.json()).items.map(item => {
            return new YoutubeSearchResult({

                id: item.id.videoId,
                title: item.snippet.title,
                description: item.snippet.description,
                thumbnailUrl: item.snippet.thumbnails.high.url
            });

        })


    });

}

1 Ответ

0 голосов
/ 26 марта 2019

Попробуйте это:

  search(query: string): Observable<YoutubeSearchResult[]> {
    const params: string = [
      `q=${query}`,
      `key=${this.apikey}`,
      `part=snippet`,
      `type=video`,
      `maxResult=10`
    ].join('&');

    const queryUrl = `${this.apiurl}?${params}`;

    return this.http.get(queryUrl)
      .pipe(
        map(
          (youTubeData: any) => {
            const items = [];
            console.log(youTubeData);
            youTubeData.items.forEach(x => {
              items.push(
                new YoutubeSearchResult(
                  x.id.videoId,
                  x.snippet.title,
                  x.snippet.description,
                  x.snippet.thumbnails.high.url
                )
              );
            });
            return items;
          }
        )
    );

Назовите это так:

  findStuff() {
    this.search('lazy').subscribe((searchResults: YoutubeSearchResult[]) => {
      console.log('search results: ', searchResults);
    });
  }
...