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

Subject.error with asObservable causes Angular 6 async pipe to rapidly consume all system memory

在 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>