RXJS - обработка ошибки 404 в Instagram API - PullRequest
0 голосов
/ 28 января 2019

Я использую Instagram API, который не использует OAuth https://www.instagram.com/explore/tags/{tag}?__a=1

Он работает как шарм, я получаю JSON и могу управлять им так, как мне нужно, однако яя получаю сообщение об ошибке, когда тег не существует.Я получаю ошибку 404 (в виде HTML вместо JSON) и не могу прочитать заголовок, чтобы получить ok или status.Похоже, ошибка не позволяет сценарию получить response.

Я пытаюсь получить тип ответа для возврата данных или нулевого значения (в случае, если хэштег не существует).

Может кто-нибудь мне помочь?

getPictures(tag: string) {
    const BASE_URL = 'https://www.instagram.com/explore/tags/' + tag + '?__a=1';
    return this.http.get(BASE_URL)
      .pipe(
        map(
          (response: Response) => {
            console.log(response.headers.values()[0]);
            const data = response.json();
            return data.graphql.hashtag.edge_hashtag_to_media.edges;
          }
        )
      );
  }

1 Ответ

0 голосов
/ 28 января 2019

Я думаю, вы должны использовать catchError от RXJS, как это:

getPictures(tag: string) {
const BASE_URL = 'https://www.instagram.com/explore/tags/' + tag + '?__a=1';
return this.http.get(BASE_URL)
  .pipe(
    catchError((err) => {
      if(err.status === 404)
         //DO SOMETHING
      } 
      return EMPTY;
    ),
    map(
      (response: Response) => {
        console.log(response.headers.values()[0]);
        const data = response.json();
        return data.graphql.hashtag.edge_hashtag_to_media.edges;
      }
    )
  );

}


РЕДАКТИРОВАТЬ
Относительно "ПУСТО", он из RXJS и позволяет возвращать пустые наблюдаемые, которые будут использованы функцией "map";)

import { EMPTY } from "rxjs";
...