根据this artcle,订阅的onComplete和onError函数是互斥的.
onError或onComplete事件的含义将在我的订阅中启动.
我有一个逻辑块,无论是否收到错误都需要执行,或者我成功完成了大量的信息.
我查找了像finally
in python这样的东西,但我找到的只是finally
,需要附加到我创建的可观察对象上.
但是我想在我订阅时,在流结束后,无论是成功还是出错,都要做这个逻辑.
有任何想法吗?
解决方法:
此运算符的当前“pipable”变体称为finalize()(自RxJS 6起).旧的和现已弃用的“补丁”运算符被称为finally()(直到RxJS 5.5).
我认为finalize()运算符实际上是正确的.你说:
do that logic only when I subscribe, and after the stream has ended
我认为这不是问题.如果需要,您可以拥有单个源并在订阅之前使用finalize().这样您就不需要总是使用finalize():
let source = new Observable(observer => {
observer.next(1);
observer.error('error message');
observer.next(3);
observer.complete();
}).pipe(
publish(),
);
source.pipe(
finalize(() => 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
2019年1月:更新了RxJS 6