相关疑难解决方法(0)

为什么 RxJS 中 Finalize 被解除?

我无法理解RxJS 中的Finalize运算符。让我用一个例子来演示这一点:

of(null).pipe(
  tap({ complete: () => console.log('tap 1 completes') }),
  finalize(() => console.log('finalize')),
  tap({ complete: () => console.log('tap 2 completes') })
).subscribe({ complete: () => console.log('subscribe completes') });
Run Code Online (Sandbox Code Playgroud)

我希望finalize回调在第二个之前执行tap。但这并没有发生。相反,上面的代码会产生以下输出:

tap 1 completes
tap 2 completes
subscribe completes
finalize
Run Code Online (Sandbox Code Playgroud)

看看实现,相信操作符通过整个可观察链传递(提升),以便始终在其末端应用。所以现在我有两个问题:

  1. 这个设计决策背后的理由是什么?您能否解释一下为什么这是一个理想/有利的财产?
  2. 是否有不同的运算符或其他解决方案来在完成和出错时执行代码,但按顺序(即在上面示例中的第二个之前tap)而不是在可观察链的末尾?

rxjs

6
推荐指数
1
解决办法
8006
查看次数

标签 统计

rxjs ×1