在下面的示例代码中,通过testSubj
运算符将sourceSubj
预订了两次给take
其中之一。似乎发生的是,当take
可观察对象完成时,即使testSubj
仍具有活动订阅,它也会导致完成。
我的问题是,为什么这是行为,有没有办法阻止主体完成?
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
运算符返回的observable完成时,将调用其take
方法。
主题是观察者,并响应next
,error
和complete
通知。如果只想订阅next
和error
通知,则仅将其转发给主题:
sourceSubj.pipe(take(1)).subscribe({
next: value => testSubj.next(value),
error: error => testSubj.error(error)
});
关于javascript - 阻止rxjs主题完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59402821/