Skip to content

Instantly share code, notes, and snippets.

@premsh
Created August 10, 2017 15:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save premsh/25f00e3959477d31623c7471e84ba6d5 to your computer and use it in GitHub Desktop.
Save premsh/25f00e3959477d31623c7471e84ba6d5 to your computer and use it in GitHub Desktop.
merge two steams of data and do something different based on input
import { Component } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import 'rxjs/add/observable/interval';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/merge';
import 'rxjs/add/operator/startWith';
import 'rxjs/add/operator/scan';
import 'rxjs/add/operator/mapTo';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
clock: Observable<any>;
clock$ = new Subject();
constructor() {
this.clock = Observable.merge(
this.clock$.mapTo('hour'),
Observable.interval(3000).mapTo('second')
)
.startWith(new Date().toString())
.scan((accu: Date, current) => {
const date = new Date(accu);
if (current === 'second') {
date.setSeconds(date.getSeconds() + 1);
}
// tslint:disable-next-line:one-line
else if (current === 'hour') {
date.setHours(date.getHours() + 1);
}
return date;
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment