Angular Behaviorsubject和of()的行为方式完全不同
我正在尝试创建一个观察对象的处理链,其中第一步必须是我需要调用的主题。下一步。使用works,但返回一个可观察的,使用BehaviorSubject应该有类似的效果,但它不起作用:使用perfectly works和订阅创建的可观察的通过管道带来数据并返回修改后的数据,而对于behaviorsubject,数据保留在subject中,订阅永远不会获取数据 例如:Angular Behaviorsubject和of()的行为方式完全不同,angular,rxjs,observable,angular9,behaviorsubject,Angular,Rxjs,Observable,Angular9,Behaviorsubject,我正在尝试创建一个观察对象的处理链,其中第一步必须是我需要调用的主题。下一步。使用works,但返回一个可观察的,使用BehaviorSubject应该有类似的效果,但它不起作用:使用perfectly works和订阅创建的可观察的通过管道带来数据并返回修改后的数据,而对于behaviorsubject,数据保留在subject中,订阅永远不会获取数据 例如: getProcessed(processed: string = null, identifier = 'default'): Obs
getProcessed(processed: string = null, identifier = 'default'): Observable<any> {
const bs = new BehaviorSubject(this.start.data);
this.localFilterSub.set(identifier, bs);
this.localFilterObs.set(identifier, bs.asObservable());
this.localFilterSet.set(identifier, {});
this.process(processed, identifier);
return this.localFilterObs.get(identifier);
}
process(name: string, identifier = 'default') {
this.localFilterObs.set(identifier, this.doProcess(name, identifier));
}
private doProcess(name: string, identifier = 'default'): Observable<any>|Subject<any> {
if (name) {
const inst = new Op();
const obss = [];
obss.push(this.localFilterObs.get(identifier));
obss.push(inst.getExternal());
return forkJoin(obss).pipe(
tap((data) => {
console.log(name, data);
}),
map((data) => {
return inst?.run(data);
// this.done.push(name);
}),
tap((data) => {
console.log(name, data);
}),
);
}
}
我真的不明白我做错了什么。直到所有的观测都完成,forkJoin才会发射。of将立即完成,但行为主体在您调用complete之前不会完成。使用CombineTest,它将在所有可见光发射后发射 const{BehaviorSubject,of,forkJoin}=rxjs; const bs$=新行为主体“bs”; o$=of' forkJoin[bs$,o$].subscriberes=>{console.logres;}; console.log'Nothing as bs$notcomplete'; setTimeout=>{bs$.complete;},2000;
但它不起作用意味着什么?什么不起作用?你期望发生什么,实际发生了什么?行为主体的行为方式与使用of创建的可观察对象的行为方式不完全相同。为什么?使用of创建的可观察对象将是具有给定数据集的可观察对象,行为主体将是一个可观察对象,在订阅数据后立即发出数据。为什么会有区别呢?我同时编辑了这个问题。