javascript - 防止 rxjs Subject 完成

标签 javascript typescript rxjs

在下面的示例代码中,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 完成时被调用。

主题是一个观察者,响应nexterrorcomplete 通知。如果您只想订阅 nexterror 通知,则只将它们转发给主题:

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/

相关文章:

javascript - 选择特定 JSON 键的值进行求和

javascript - 语法需要一个名为 __spreadArrays 的导入助手

javascript - 比较两个 JSON 并创建具有共同值的 json

angular - 如何使用 Angular 2 组件中的路由器打开新的浏览器选项卡?

javascript - 文本区域按键不起作用

Javascript:如何遍历日志文件

javascript - RxJS(和 Angular ): Attempting to cache one-time HTTP requests still causes multiple requests

angular - 在 Angular 中导入 RxJS 运算符时出错

angular - FormControl uniqueUntilChanged() 不起作用

javascript - 从javascript中的关联数组获取键