Как вызвать и следующий и ошибка на Rx JS Наблюдаемый - PullRequest
2 голосов
/ 23 января 2020

Если у вас есть API (например, GraphQL), который допускает изящные сбои, когда возвращаются как data, так и error, есть ли способ вызвать как счастливый, так и ошибочный путь Observable.

Служба:

public fetchData: Observable<any> {
    return myApi.fetch().pipe(map(result => {
        if (result.data) {
            // call happy path here
        }   
        if (result.error) {
            // call error path (as well) here
        } 
    }));
}

Звонящий:

myService.fetchData().subscribe(
    next => {
        // this is called
    }, error => { 
        // as well as this
    });

Есть ли удобный способ передать / отобразить результат и вызвать оба функции обратного вызова?

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вы можете обернуть свои fetchData развлечения c в Observable.

Сервис:

public fetchData: Observable<any> {
    return new Observable(observer => {
        myApi.fetch().subscribe(
            result => {
                observer.next(result.data); // call happy path here
                if (result.error) {
                    observer.error(result.error); // call error path (as well) here
                }
            }
        );
    });
}

StackBlitz ДЕМО

0 голосов
/ 24 января 2020

Звучит так, как будто вы хотите иметь возможность получить значение, которое вы возвращаете вызывающей стороне, из своей выборки, когда API возвращает ошибку. Вы можете попробовать что-то вроде этого

public fetchData: Observable<successObject | boolean> {
  return myApi.fetch().pipe(
    map(result => {
      if (result.data) {
        // call happy path here
      }   
    }),
    catchError(() => {
      // catch API errors here and return false
      return of(false);
    })
  );
}

Все ответы об ошибках будут перехвачены catchError, а затем будет возвращено Observable. Тогда в вашем звонящем вы можете сделать что-то вроде этого

myService.fetchData().subscribe(response => {
  if(!response) {
    // error state
  }
  // success state
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...