2016-11-20 118 views
27

根据this artcle,onCompleteonError功能subscribe是互斥的。可观察终于订阅

含义onErroronComplete事件将在我的subscribe中激发。
我有一个逻辑块,无论我收到错误还是成功完成信息蒸汽,都需要执行。

我抬头寻找类似finally in python的东西,但是我发现的所有东西都是finally,它需要附加到我创建的可观察物上。

但是我只想在订阅时以及流结束后,不管是成功还是错误,都要这样做。

任何想法?

回答

40

我认为finally()运算符实际上是正确的。你说:

做到这一点的逻辑,只有当我订阅,流结束之后

这不是一个问题,我想。如果需要,您可以在订阅之前有一个source并使用finally()。你不需要总是使用finally()方式:

let source = Observable.create(observer => { 
    observer.next(1); 
    observer.error('error message'); 
    observer.next(3); 
    observer.complete(); 
}).publish(); 

source 
    .finally(() => console.log('Finally callback')) 
    .subscribe(
    value => console.log('#1 Next:', value), 
    error => console.log('#1 Error:', error), 
    () => console.log('#1 Complete') 
); 

source 
    .subscribe(
    value => console.log('#2 Next:', value), 
    error => console.log('#2 Error:', error), 
    () => console.log('#2 Complete') 
); 

source.connect(); 

这将打印到控制台:

#1 Next: 1 
#2 Next: 1 
#1 Error: error message 
Finally callback 
#2 Error: error message 
+0

有趣,我没有想到的是,由于 –

+0

。最后()对我的作品。谢谢。 – STEEL

+1

有趣的是,它是Promise的一种相反的模式,因为首先追加了'finally()'方法,并且订阅必须强制通过/失败。 – BradGreens