Я пытаюсь следовать этому примеру при изучении switchMap
для rxjs
. Рабочий пример находится здесь и написан на TypeScript. Я попытался написать что-то подобное на TypeScript (Angular 2) в VS Code, но получил ошибку компилятора.
Operator '+' cannot be applied to types 'Observable | Observable' and 'Observable | Observable'. (parameter) curr: Observable | Observable
Мой код выглядит следующим образом.
playSubject = new Subject<boolean>();
pauseSubject = new Subject<boolean>();
interval$ = Observable.interval(1000).mapTo(-1);
pause$ = Observable.from(this.pauseSubject).mapTo(Observable.of(false));
resume$ = Observable.from(this.playSubject).mapTo(this.interval$);
timer$ = Observable
.merge(this.pause$, this.resume$)
.startWith(this.interval$)
.switchMap(v => Observable.of(v))
.scan((acc, curr) => {
return curr ? curr + acc : acc; //problem right here
});
ngAfterViewInit() {
this.timer$.subscribe(data => {
console.log(data);
});
}
play() { //bound to button click event
this.playSubject.next(true);
}
pause() { //bound to button click event
this.pauseSubject.next(false);
}
Я могу изменить код в функции scan
следующим образом, но тогда мне нужно будет знать, является ли curr
Observable<boolean>
или Observable<number>
.
playSubject = new Subject<boolean>();
pauseSubject = new Subject<boolean>();
interval$ = Observable.interval(1000).mapTo(-1);
pause$ = Observable.from(this.pauseSubject).mapTo(Observable.of(false));
resume$ = Observable.from(this.playSubject).mapTo(this.interval$);
timer$ = Observable
.merge(this.pause$, this.resume$)
.startWith(this.interval$)
.switchMap(v => Observable.of(v))
.scan((acc, curr) => {
return curr; //how do i check for Observable<Type>?
});
Любая идея о том, что я делаю неправильно или как проверить тип Observable внутри scan
?
Observable.of
вswitchMap
? В приведенном вами примере этого нет. - person Szabolcs Dézsi   schedule 31.01.2017.startWith(this.interval$)
, когда вы начинаете последовательность с Observable? ОператорstartWith
просто повторно передает Observable без подписки на него reactivex. io/rxjs/файл/es6/оператор/ - person martin   schedule 31.01.2017