仅使用BehaviorSubject发出的.first()值-Angular&;RxJS

仅使用BehaviorSubject发出的.first()值-Angular&;RxJS,angular,rxjs,Angular,Rxjs,情景: 我有一个服务JobService,其中 export class JobService { private JobIdSubject = new BehaviorSubject(''); constructor() {} public setJobId(jobId: string) { this.JobIdSubject.next(jobId); } public getJobId(): Observable<strin

情景:

我有一个服务
JobService
,其中

export class JobService {

    private JobIdSubject = new BehaviorSubject('');
    constructor() {}

    public setJobId(jobId: string) {
        this.JobIdSubject.next(jobId);
    }

    public getJobId(): Observable<string> {
        return this.JobIdSubject;
    }
}
我观察到,
Hello
被打印了好几次,最后我得到了

错误范围错误:超过最大调用堆栈大小

位于ZoneDelegate.handleError(zone.js:393)

在Object.onHandleError(core.js:4651)

位于ZoneDelegate.handleError(zone.js:395)

在Zone.scheduleTask(Zone.js:242)中

在Zone.scheduleMocrotask(Zone.js:258)

我尝试先使用
取(1)

this.jobSvc.getJobId().first().subscribe((jobId)=>{

我明白了

.getJobId(…)。first不是函数

基本上,我想在加载组件并获得
作业Id
的第一个值后,立即取消订阅
行为主体

import { Observable } from "rxjs";
import { first } from "rxjs/operators";
应该是:

this.jobSvc.getJobId().pipe(first()).subscribe();
应该是:

this.jobSvc.getJobId().pipe(first()).subscribe();

,但您应该解决问题,而不是回避或忽略它。似乎
setJobId
在某个地方调用过多次,取消订阅不是解决方案。但您应该解决问题,而不是回避或忽略它。似乎
setJobId
在某个地方调用过多次,取消订阅不是解决方案