Rxjs 返回扫描可见的默认值

Rxjs 返回扫描可见的默认值,rxjs,observable,Rxjs,Observable,我可以阅读rxjs文档()中的方法扫描,这里有一个种子参数 在下面的代码中,我想为可观察的_通道返回一个默认值 export interface IChannelOperation extends Function { (channels: Channel[]): Channel[]; } let initialChannel: Channel[] = []; @Injectable() export class ChannelsCatalog{ defaultChannel:

我可以阅读rxjs文档()中的方法扫描,这里有一个种子参数

在下面的代码中,我想为可观察的_通道返回一个默认值

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();