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

Rxjs 在另一个流完成后,发出值的正确方式是什么?,rxjs,ionic3,Rxjs,Ionic3,我试着“在溪流中思考”。在流a完成后,向流B发出值的正确方式是什么 我目前的执行情况如下: streamADelete$(data) .do(() => dismiss()) .subscribe(() => streamB$.next()) // this seems wrong! 对我来说,这个实现有点问题如果您的主要目标是调用streamB.next,但是在subscribe块之前的某个地方,那么正确的执行位置应该是tap操作符,它用于执行副作用 streamADelet

我试着“在溪流中思考”。在流a完成后,向流B发出值的正确方式是什么

我目前的执行情况如下:

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

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

如果您的主要目标是调用streamB.next,但是在subscribe块之前的某个地方,那么正确的执行位置应该是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/遵循一些旧教程?

每次发出事件时都会调用第一个订阅回调。而不是在流完成时。当流完成时,将调用传递给subscribe的第三个回调。我知道,使用上面的代码,subscribe将触发一个观察者next,该观察者将调用流B的主体next opon,但是否有一个运算符在不订阅第一个对象的情况下向流B发出值?@EmilIakoupov,如果您能解释一下使用此代码的更大目标,我们可能会更有帮助。什么是streamA,为什么您需要向streamB发送?如果您只想在streamA完成后做出反应,您应该使用subscribe{complete:=>streamB$。next}谢谢您,我正在使用RxJS的旧版本,目前没有使用管道-我在尝试升级时遇到一些问题。。。本质上,tap与do相同,但我仍然需要订阅才能执行观察器。问题是我在模板中有一个角度异步操作符,它绑定到一个由多个streams merge操作符组成的observable,因此在这一端有一个subscribtion,这就是为什么我在寻找一种避免另一个子脚本的方法,并且刚刚意识到我可以创建另一个主题来执行streamA$,然后将其映射到streamB$。。。