0

当用户在firebase数据库中更新相同对象和相同属性的两个按钮上单击非常快时,我遇到了一个问题。只有一个请求保存和其余覆盖的问题。它发生在用户同时点击两个按钮的情况下。

我的问题是是否有办法以最小的延迟执行点击流。我希望每次执行之间至少有 2 秒。谢谢您的帮助。

我想记录所有点击,但以最小的延迟执行功能。

(function($){ 
    $(function($, undefined){
       var count = 0;
        const click$ = Rx.Observable.fromEvent($('.btn'), 'click').share();

        click$
            .map((ev)=> {
                count ++;
                return count;
            })
            .bufferTime(1000)
            .filter(buffer => buffer.length > 0)
             
            .do((buffer) => console.log(`new buffer: ${buffer}`))
            .map((buffer)=> {
              return  Rx.Observable.fromArray(buffer).concatMap(streams => Rx.Observable.of(streams).delay(2000))
            })
            .flatMap((s)=> s)
            .subscribe((a)=> {
                console.log(`${a} : ${new Date()}`)
            });
    });

})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button class="btn">Click</button>
</body>
</html>

问题是当我点击多次超过第二次时。来自不同缓冲区的流将同时执行。我怎么能解决它:(例如:

新缓冲区:1,2,3,4

新缓冲区:5,6,7,8,9,10

1 : 2018 年 5 月 12 日星期六 17:22:29 GMT-0600 (MDT)

新缓冲区:11,12,13

5 : 2018 年 5 月 12 日星期六 17:22:30 GMT-0600 (MDT)

2 : 2018 年 5 月 12 日星期六 17:22:31 GMT-0600 (MDT)

11 : 2018 年 5 月 12 日星期六 17:22:31 GMT-0600 (MDT)

2和11同时发生。我怎么能解决它:(

4

2 回答 2

1

这个怎么样,但通常你可以用 http 调用替换计时器功能,你不能确定 http 调用需要多长时间。

const click$ = Rx.Observable.fromEvent(btn, 'click')

click$.concatMap(e=>click$.concatMap(e=>Rx.Observable.timer(2000)))
.subscribe(a=> console.log(`${a} : ${new Date()}`));
于 2018-05-14T02:41:03.093 回答
0

您可以使用间隔流压缩事件流,以将每个发射与间隔耦合。源值将在发射之间至少延迟 2 秒后发射:

const source$ = Rx.Observable.from([1,2,3,4]);
const interval$ = Rx.Observable.interval(2000);
Rx.Observable.zip(source$, interval$)
  .map(([value, _index]) => value)
  .subscribe(console.log);
于 2018-05-13T10:58:44.500 回答