Как вызвать исключение для Subject Observer на карте? - PullRequest
0 голосов
/ 26 января 2019

У меня есть тема 0bserver:

public subject = new Subject<any>();

Я отправляю сообщение вот так:

this.subject.next({value : 1});

Затем я пытаюсь сделать следующее:

this.subject.map(data => {
      if (!data || !data.value) {
        throw new Error('No value, no function...');
      } else {
        return data;
      }
    }).subscribe((data: IFilterCustom) => {
      // WORK HERE WITH FILLED DATA
}, err => {
  console.error('Error');
});

Я пытаюсь проверить, не содержит ли входящие данные value Я вызываю исключение.Как это сделать?

1 Ответ

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

В последних версиях rxjs вы делаете это, используя трубы:

import { map, catchError } from 'rxjs/operators'
import { of } from 'rxjs'

this.subject.pipe(
  map((data) => {
    if (!data || !data.value) {
      throw new Error('No value, no function...');
    } else {
      return data;
    }
  }),
  catchError(() => {
    console.log('Error')
    return of(null) // Be sure to return an observable here! The 'of' function creates an observable out of the argument
  })
)

Часть catchError будет вызвана после того, как в наблюдаемом объекте будет выдана ошибка. Это также полезно для обнаружения любых сетевых ошибок в запросах.

Если вам не нужна обработка ошибок и вам просто нужно, чтобы объект не выдавал значения, тогда вы можете использовать фильтр

import { filter } from 'rxjs/operators'

this.subject.pipe(
  filter((data) => {
    return (data && data.value)
  })
)
...