Угловой http-клиент, наблюдаемый канал - PullRequest
0 голосов
/ 29 октября 2018

У меня есть это в моем сервисе

  doSomething(): Observable<any> {
    return this.http.get('http://my.api.com/something')
      .pipe(
        map((data: Response) => {
            if (data && data['success'] && data['success'] === true) {
              return true;
            } else {
              return false;
            }
          }
        )
      );  
  }  

Это работает, я могу подписаться на функцию из моего компонента, например

    this.myService.doSomething().subscribe(
        (result) => {
            console.log(result);
        },
        (err) => {
            console.log("ERROR!!!");
        }
    );

Все это уже работает, но я хочу провести рефакторинг, чтобы можно было удалить

 if (data && data['success'] && data['success'] === true)

на моей карте. Так что функция карты будет выполнена только тогда, когда я заранее выполнил проверку. Моей первой мыслью было добавить функцию в стек конвейера, которая будет принимать Response от http-клиента, проверить, выполнены ли условия, в противном случае выдается ошибка (с помощью функции throwError). Но я изо всех сил как (по крайней мере, выяснить, какую функцию Rxjs использовать).

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

1 Ответ

0 голосов
/ 29 октября 2018

Попробуйте использовать это:

doSomething(): Observable<any> {

    return this.http.get('http://my.api.com/something')
      .pipe(
        mergeMap((data: Response) => {
            return of(data && data['success'] === true) 
          }
        ));  
}  

Вы должны сначала выполнить mergeMap, чтобы выполнить проверку, поскольку ваш наблюдаемый результат не будет доступен, если нет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...