在另一个流完成后发出值的正确方法是什么?

What is the correct way to emit a value after another stream has completed?

我正在尝试 'think in streams'。在流 A 完成后向流 B 发出值的正确方法是什么?

我目前的实现如下:

streamADelete$(data)
 .do(() => dismiss())
 .subscribe(() => streamB$.next()) // this seems wrong!

对我来说,这个实现有问题

如果您的主要目标是调用 streamB.next(),但在订阅块之前的某处,那么正确的位置是 tap() 运算符,它用于产生副作用.

streamADelete$(data)
    .pipe(
        tap(() => streamB$.next()),
        // Continue with your next operator
    )

虽然这看起来确实很奇怪,但我们通常能够在不产生副作用的情况下完成大部分事情。我不确定您的用例是什么,但另一种可能有用的模式可能是将您的流分成两部分,如下所示:

streamADelete$.pipe(
    // Do whatever you want to do in your original stream here
)
.subscribe();

streamADelete$.pipe(
    // Do whatever you wanted to do in you streamB$ stream here
)
.subscribe();

(你的 RxJS 似乎也有点奇怪,你使用的是旧版本的 RxJS / 遵循一些旧教程吗?)