与Observable中的observer.throw和observer.error有什么区别?

时间:2017-01-31 06:26:14

标签: typescript rxjs observable

observer.throw(err)observer.error(err)有什么区别?

我使用的是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');
    }
);

2 个答案:

答案 0 :(得分:8)

实际上你的观察者是Subscriber class的一个实例。它有error()方法,但没有throw()方法 那里有Observable.throw(),但那是不同的。

  • observer.throw(err)不存在。

  • Observable.throw(err)是一个仅发出一个error通知的可观察对象。

  • observer.error()通常在Observable.create()回调中用于向新订阅的观察者发送error通知(就像.next().complete

答案 1 :(得分:0)

订阅服务器上没有throw方法。

如果您尝试调用throw方法,则会看到以下错误:

TypeError: observer.throw is not a function

你确定你没有在某处发现错误吗?

当您construct Observable时,您传递的函数将收到Subscriber,该Observer实现了{{3}}界面。