gpt4 book ai didi

javascript - 如何在 Rx.js 中的 throttle 中的每个值之后重置窗口持续时间?

转载 作者:行者123 更新时间:2023-11-27 23:29:25 25 4
gpt4 key购买 nike

我希望在生成新值时收到通知,但前提是自生成前一个值以来已经过了一段时间。

例如如果源开始生成值(在 t=0s 时)并每秒生成新值,持续 10 秒,然后停止 5 秒,然后再次启动(在 t=15s 时),假设窗口持续时间设置为小于 5 秒,我只想收到有关 t=0 和 t=15 时的值的通知(在它们生成后立即)。类似于 throttle ,但每个新值都会重置窗口持续时间。

最佳答案

这是匆忙完成的,但你似乎正在工作:jsfiddle

这个想法是从第一个值开始,在指定的持续时间内进行去抖,并在去抖后获取下一个值。 源代码必须共享,因为它将被多次订阅。

var ta_message = document.getElementById('ta_message');
var ta_intermediary = document.getElementById('ta_intermediary');
var ta_result = document.getElementById('ta_result');

function emits ( who, who_ ) {return function ( x ) {
who.innerHTML = [who.innerHTML, who_ + " emits " + JSON.stringify(x)].join("\n");
};}

var count = 0;
var Xms = 1700;

var source$ = Rx.Observable
.fromEvent(document.getElementById('source'), 'click')
.map(function(){return ++count;})
.do(emits(ta_message, 'count'))
.share();

var firstNextItem$ = source$
.debounce(Xms)
.flatMapLatest(function(){return source$.take(1);})
.do(emits(ta_intermediary, 'first value after Xms pause'))
;

var result$ = Rx.Observable.merge(source$.take(1), firstNextItem$)
.do(emits(ta_result, 'result'))
;

result$.subscribe(function(){});

关于javascript - 如何在 Rx.js 中的 throttle 中的每个值之后重置窗口持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34698337/

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