2017-01-31 4 views
2

В чем отличие от observer.throw(err) и observer.error(err)?В чем разница с observer.throw и observer.error в Observable?

Я использую RxJS версии "5.0.0-beta.12"

var innerObservable = new Observable(observer => { 
    console.log('Inner observable call failed'); 
    observer.error(new Error('Call failed!')); 
}) 


var outerObservable = new Observable(observer => { 
    innerObservable.subscribe(
     data => { 
      observer.next(data); 
      observer.onCompleted(); 
     }, 
     err => { 
      //observer.throw(err); // `console.error` doesn't get called 
      observer.error(err); //// `console.error` it's called 
     } 
    ) 
}); 

outerObservable.subscribe(
    next => { 
     console.log('ok!'); 
    } 
    , err => { 
     console.error('error'); 
    } 
    ,() => { 
     console.log('done'); 
    } 
); 
+0

какая версия 'RxJS' вы используете? – shusson

+0

@shusson "5.0.0-beta.12" –

+0

Как определяется 'innerObservable'? – shusson

ответ

5

Фактически ваш наблюдатель является экземпляром Subscriber class. Он имеет метод error(), но нет метода throw().
Есть Observable.throw(), но это что-то другое.

  • observer.throw(err) не существует.

  • Observable.throw(err) является наблюдаемым, который испускает только одно уведомление error.

  • observer.error() обычно используется внутри Observable.create() обратного вызова для отправки уведомлений error (так же, как .next() или .complete) на недавно подписался наблюдателя.

+0

Не могли бы вы прояснить разницу. –

+0

@SamanMohamadi Я немного обновил его. – martin

0

Там нет throw метод на Абонента.

Вы должны увидеть следующее сообщение об ошибке, если вы пытаетесь вызвать метод throw:

TypeError: observer.throw is not a function 

Вы уверены, что вы не поймать ошибку где-нибудь?

Когда вы constructObservable функция вы передаете получите Subscriber, который реализует интерфейс Observer.