最终在订阅时可观察

2022-08-30 02:34:26

根据这门艺术品,和功能是相互排斥的。onCompleteonErrorsubscribe

这意味着要么要么事件将在我的.
我有一个逻辑块,无论我收到错误,还是我成功完成了我的信息流,都需要执行它。onErroronCompletesubscribe

我寻找像python中终于这样的东西,但我发现的只是最终需要附加到我创建的可观察量上。

但是,我只想在订阅时以及流结束后(无论是成功还是出错)执行该逻辑。

有什么想法吗?


答案 1

此运算符的当前“可管道”变体称为(自 RxJS 6 起)。调用了较旧的且现已弃用的“修补程序”运算符(直到 RxJS 5.5)。finalize()finally()

我认为操作员实际上是正确的。你说:finalize()

仅在我订阅时以及流结束后执行该逻辑

我认为这不是问题。如果需要,您可以在订阅之前使用一个。这样,您就不需要始终使用:sourcefinalize()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 进行了更新


答案 2

唯一对我有用的是这个

fetchData()
  .subscribe(
    (data) => {
       //Called when success
     },
    (error) => {
       //Called when error
    }
  ).add(() => {
       //Called when operation is complete (both success and error)
  });