Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Observerable sequence of random numbers within a range

How can i create an observable sequence of random numbers within a range using the rxjs observable?

I can iterate over a range using range.

For example:

Observable.range(0, 20)
    .flatMap(data => getImage(data))
    .map(data => this.image = data);

However, i would like to have it continuously generate a random number for the sequence until i force it to stop. Not just iterate through the values until it is done.

NOTE: I am using rxjs 5. Which does not have a while.

like image 314
prolink007 Avatar asked Feb 08 '26 00:02

prolink007


2 Answers

This will generate the random number within intervals of time. This is exactly what i needed.

let mySubscription: Subscription<number> = Observable.interval(3000)
    .map(data => generateRandomNumber(...))
    .subscribe(
        data => console.log(data),
        error => console.log(error),
        () => console.log("complete")
    );

To stop the observer, simply unsubscribe from the subscription.

mySubscription.unsubscribe();

generateRandomNumber() is a method that just generates a random number for me. It is out of scope of the issue.

like image 97
prolink007 Avatar answered Feb 12 '26 06:02

prolink007


If you have access to generator functions you could do something like this using Observable.from: (Typescript support)

jsbin

function* generator(min, max){
  while (true) {
    yield Math.random() * (max - min) + min;
  }
}

Rx.Observable.from(generator(0, 9000))
  .take(42)
  .subscribe(value => console.log(value));
like image 35
Niklas Fasching Avatar answered Feb 12 '26 06:02

Niklas Fasching