仅使用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
在某个地方调用过多次,取消订阅不是解决方案