如何转换Http调用?

时间:2019-03-25 21:19:28

标签: angular http youtube-api

我需要在Angular 6中转换此弃用的get http查询。我有错误:

  

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 :(得分:0)

尝试一下:

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