在下面的示例代码中,testSubj
通过 take
运算符订阅了两次到 sourceSubj
其中之一。似乎发生的情况是,当 take
Observable 完成时,它会导致 testSubj
完成,即使它仍然有一个事件订阅。
我的问题是,为什么会出现这种行为,有没有办法阻止 Subject 完成?
rxjs 6.4
import { Subject } from 'rxjs';
import { take } from 'rxjs/operators';
const sourceSubj = new Subject<string>();
const testSubj = new Subject<string>();
testSubj.subscribe({
next: s => console.log(`next: ${s}`),
complete: () => console.log(`completed`)
});
sourceSubj.pipe( take(1) ).subscribe(testSubj);
sourceSubj.subscribe(testSubj);
sourceSubj.next('1');
最佳答案
它完成是因为它的 complete
方法在 take
运算符返回的 observable 完成时被调用。
主题是一个观察者,响应next
、error
和complete
通知。如果您只想订阅 next
和 error
通知,则只将它们转发给主题:
sourceSubj.pipe(take(1)).subscribe({
next: value => testSubj.next(value),
error: error => testSubj.error(error)
});
关于javascript - 防止 rxjs Subject 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59402821/