Created
June 4, 2017 20:31
-
-
Save musukvl/9b90691506761ed1a95c2ff3cf1b7be5 to your computer and use it in GitHub Desktop.
RX.JS Observer concept demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {Observable} from "rxjs"; | |
import {Subject} from "rxjs"; | |
// import {Observable} from "rxjs/Observable"; | |
// import "rxjs/add/operator/map"; | |
// import "rxjs/add/operator/filter"; | |
let numbers = [1, 5, 10, 15]; | |
let arrSource = Observable.from(numbers); | |
let contextCounter = 1; | |
let source = Observable.create(observer => { | |
let index = 0; | |
let contextId = contextCounter++; | |
let produceValue = () => { | |
console.log(`context [${contextId}] produce: ${numbers[index]}`); | |
observer.next(numbers[index++]); | |
if(index < numbers.length) { | |
setTimeout(produceValue, 1000); | |
} | |
else { | |
observer.complete(); | |
} | |
} | |
produceValue(); | |
}); | |
let observer1 = {next: (x) => console.log(`observer1 got ${x}`)}; | |
let observer2 = {next: (x) => console.log(`observer2 got ${x}`)}; | |
let subj = new Subject(); | |
console.log("subscribe sample"); | |
source.subscribe(observer1); | |
source.subscribe(observer2); | |
/* | |
console.log("subj sample"); | |
subj.subscribe(observer1); | |
subj.subscribe(observer2); | |
source.subscribe(subj); | |
*/ | |
/* | |
console.log("multicasted sample"); | |
let multicastedSource = source.multicast(subj); | |
multicastedSource.subscribe(observer1); | |
multicastedSource.connect(); | |
multicastedSource.subscribe(observer2); | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment