Rxjs 返回扫描可见的默认值
我可以阅读rxjs文档()中的方法扫描,这里有一个种子参数 在下面的代码中,我想为可观察的_通道返回一个默认值Rxjs 返回扫描可见的默认值,rxjs,observable,Rxjs,Observable,我可以阅读rxjs文档()中的方法扫描,这里有一个种子参数 在下面的代码中,我想为可观察的_通道返回一个默认值 export interface IChannelOperation extends Function { (channels: Channel[]): Channel[]; } let initialChannel: Channel[] = []; @Injectable() export class ChannelsCatalog{ defaultChannel:
export interface IChannelOperation extends Function {
(channels: Channel[]): Channel[];
}
let initialChannel: Channel[] = [];
@Injectable()
export class ChannelsCatalog{
defaultChannel: Subject<Channel> = new BehaviorSubject<Channel>(null);
private _currentChannel: Subject<Channel> = new BehaviorSubject<Channel>(null);
private _channels: Observable<Channel[]>;
private _updates: Subject<any> = new Subject<any>();
constructor(){
this._channels = this._updates
.scan((channels: Channel[], operation: IChannelOperation) => operation(channels), initialChannel)
.publishReplay(1)
.refCount();
}
getAllChannelsCatalog(): Observable<Channel[]>{
return this._channels;
}
}
.scan
的种子值作为累加器用于第一次排放。如果未进行任何排放,则扫描操作员不执行
您正在寻找.startWith
运算符,该运算符可以在扫描运算符之后加上后缀,以便在订阅时让流直接发出传递给startWith的值
this._channels = this._updates
.scan((channels: Channel[], operation: IChannelOperation) => operation(channels), initialChannel)
.startWith(initialChannel)
.publishReplay(1)
.refCount();
您仍然需要
.scan
的种子,否则在初始通道从发射后,
将在执行前进行两次发射。scan
将执行并返回其第一个值。您可能需要查看startWith()
这可能会有所帮助。
this._channels = this._updates
.scan((channels: Channel[], operation: IChannelOperation) => operation(channels), initialChannel)
.startWith(initialChannel)
.publishReplay(1)
.refCount();