javascript – Observable最后订阅

根据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

上一篇:javascript – RxJS的新功能,范围不是函数


下一篇:javascript – 如何在rxjs中首先*完全*完成后才启动第二个observable * *