在下面的示例代码中,通过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方法。

主题是观察者,并响应nexterrorcomplete通知。如果只想订阅nexterror通知,则仅将其转发给主题:

sourceSubj.pipe(take(1)).subscribe({
  next: value => testSubj.next(value),
  error: error => testSubj.error(error)
});

关于javascript - 阻止rxjs主题完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59402821/

10-09 05:01