gpt4 book ai didi

rxjs - 如何创建一个无限的 Observable 以随机间隔生成随机数?

转载 作者:行者123 更新时间:2023-12-01 22:20:10 28 4
gpt4 key购买 nike

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

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 的示例:

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

3ms 7ms 6ms 3ms 10ms

最佳答案

作为替代方案,如果您不想生活在令人困惑的超时世界中,您可以将其完全编写为流:

// the stream
const randomizer$ = Rx.Observable.of("")
.switchMap(() => Rx.Observable
.timer(getRandomDelay())
.mapTo(getRandomNumber()))
.repeat();

// subscribe to it
randomizer$.subscribe(num => console.log("Random number after random delay" + num));


// your utility functions
function getRandomNumber() {
return ~~(Math.random() * 200)
}

function getRandomDelay() {
return Math.random() * 1000
}

此处的工作示例:http://jsbin.com/zipocaneya/edit?js,console

<小时/>

替代方案:首先创建随机数,然后添加延迟(如果执行时间不重要)

// the stream
const randomizer$ = Rx.Observable.of("")
.switchMap(() => Rx.Observable
.of(getRandomNumber())
.delay(getRandomDelay()
)
.repeat();

// subscribe to it
randomizer$.subscribe(num => console.log("Random number after random delay" + num));
<小时/>

附加说明:由于流外部没有并发或异步操作,而不是 switchMap你也可以使用 concatMapflatMap - 在这种情况下,它们的工作原理都是相同的。

关于rxjs - 如何创建一个无限的 Observable 以随机间隔生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41388199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com