1
rxjsのドキュメント(http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-scan)でメソッドスキャンを読むことができます。シードの引数があります。スキャンでデフォルト値を返すObservable
以下のコードでは、_channels Observablesのデフォルト値を返したいと思います。
export interface IChannelOperation extends Function {
(channems: 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;
}
}
しかし、私は、観察の元に加入したときに、シード引数が返されません。
var channelsCatalog = new ChannelsCatolog();
channelsCatalog.getAllChannelsCatalog.subscribe((value) => console.log(value));
「startWith()」を参考にしてみてください。 – olsn