带有asObservable的Subject.error会导致Angular 6异步管道快速消耗所有系统内存



在Angular 6中,我有一个非常简单的组件,如下所示:

import { Component, OnInit } from '@angular/core';
import { BehaviorSubject ,  Subject ,  Observable } from 'rxjs';
@Component({
selector: 'test',
templateUrl: 'test.component.html',
styleUrls:[]    
})
export class TestComponent implements OnInit{
someSubject: BehaviorSubject<string> = new BehaviorSubject("Hey");    
ngOnInit(){
this.someSubject.error("Some error.");
}
get observable():Observable<string>{
return this.someSubject.asObservable();
}
}

和这个模板:

<div>
Will it resolve?
<div *ngIf="observable | async as value">
Value: {{value}}
</div>
</div>

当我运行这个程序时,我预计会遇到错误,这将关闭流并简单地不渲染(就像我调用了.complete一样(,但它会迅速将错误消息输出到控制台,并将非常快地消耗我的开发盒上的所有24GB内存。

为什么会出现这种情况?如果你允许一个错误输入async管道,你的惩罚真的是系统内存耗尽吗?

编辑:

我现在看到是asObservable调用导致了这个问题,因为它每次都会得到一个新实例(尽管我仍然认为,如果现有实例出错,它不应该再返回(。如果我只想在下游公开Observable而不遇到这种情况,那么应该使用什么样的正确模式?

尝试将get更改为property

import { Component, OnInit } from '@angular/core';
import { BehaviorSubject ,  Subject ,  Observable } from 'rxjs';
@Component({
selector: 'test',
templateUrl: 'test.component.html',
styleUrls:[]    
})
export class TestComponent implements OnInit{
someSubject: BehaviorSubject<string> = new BehaviorSubject("Hey");    
data$;
ngOnInit(){
this.data$ = this.someSubject.asObservable();
}

}

模板

<div>
Will it resolve?
<div *ngIf="data$| async as value">
Value: {{value}}
</div>
</div>

最新更新