如何创建一个以随机间隔产生随机数的无限 Observable? [英] How to create an infinite Observable that produces random numbers at random intervals?

查看:49
本文介绍了如何创建一个以随机间隔产生随机数的无限 Observable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定一个生成随机数的函数,您将如何创建一个以随机间隔生成随机数的无限 Observable?

Given a function that generates random numbers, how would you create an infinite Observable that produces random numbers at random intervals?

function getRandomNumber() {
  // Assume this function returns a random number, e.g. 198
}

function getRandomDelay() {
  // Assume this function returns a random delay in ms, e.g. 2000
}

这是一个期望的 Observable 的例子:

Here is an example of a desired Observable:

---198--------64-------3---2----------18------->  (indefinitely)

3ms     7ms       6ms   3ms     10ms

推荐答案

const { Observable }  = require("rxjs");

const ob = new Observable(sub => {
  let timeout = null;

  // recursively send a random number to the subscriber
  // after a random delay
  (function push() {
    timeout = setTimeout(
      () => {
        sub.next(getRandomNumber());
        push();
      },
      getRandomDelay()
    );
  })();

  // clear any pending timeout on teardown
  return () => clearTimeout(timeout);
});

ob.subscribe(console.log);

这篇关于如何创建一个以随机间隔产生随机数的无限 Observable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆