可观察到每次流结束时延迟随机时间

时间:2017-01-13 05:59:42

标签: javascript reactjs rxjs reactive-programming

我需要创建一个随机间隔推文的机器人,如下所示:

wait 1 hour
tweets something
wait 5 hours
tweets something
wait 30 minutes
tweets something
wait 10 hours
tweets something

延迟时间介于10小时之间或类似的情况

可观察量的问题在于我需要生成这些间隔,然后将其输入到可观察量链中。例如,我需要生成一个包含所有延迟的数组,并且只有订阅它才能发布推文。

有没有办法创建一个只在它结束时发出新项目的observable?例如:

Rx.Observable.just().timer(randomTime()).subscribe(emitObservableAgain());

我认为这不是Observables的意图。就像......将一个可观察链的末端连接到自身是一个很好的实践吗?

另外,如何将rx.timer导入nodejs?只导入' rx' (来自npm)没有给我这些功能

1 个答案:

答案 0 :(得分:4)

您可以使用重复:

sessionStorage.userId

编辑:我添加了一个显示流如何工作的实时脚本:

Rx.Observable.just()
    .switchMap(() => Rx.Observable.timer(randomTime()))
    .do(tweetMyThing)
    .repeat()
    .subscribe();
// Helper-Methods to visualize the stream
function randomTime() {
    return ~~(Math.random() * 2000) + 50;
}

var lastReceivedEvent = +new Date();
function tweetMyThing(value) {
    console.log("Received after " + (+new Date() - lastReceivedEvent));
    lastReceivedEvent = +new Date();
}
// \end of helper-methods

// the stream
Rx.Observable.just()
    .switchMap(() => Rx.Observable.timer(randomTime()))
    .do(tweetMyThing)
    .repeat(20)
    .subscribe();