Javascript 限制GET请求(D3.js/Twitter API)

Javascript 限制GET请求(D3.js/Twitter API),javascript,ajax,d3.js,twitter,get,Javascript,Ajax,D3.js,Twitter,Get,我目前正在使用D3.js,并已将我的图表从侦听mouseover/mouseout修改为mousemove。这在图表中带来了很多问题,但没有比我的GET status/show/:id请求更重要的问题了 以前,我会在我的图表上悬停一些点,如果在那个点的半小时内有一条来自后端tweet数据库的tweet,它会发送一个GET请求来获取该tweet 我现在的问题是,因为我在图表上的这些点附近使用mousemove,而不是mouseover,它会触发数百次,GET请求在15分钟的窗口内被限制为900次

我目前正在使用D3.js,并已将我的图表从侦听mouseover/mouseout修改为mousemove。这在图表中带来了很多问题,但没有比我的GET status/show/:id请求更重要的问题了

以前,我会在我的图表上悬停一些点,如果在那个点的半小时内有一条来自后端tweet数据库的tweet,它会发送一个GET请求来获取该tweet

我现在的问题是,因为我在图表上的这些点附近使用mousemove,而不是mouseover,它会触发数百次,GET请求在15分钟的窗口内被限制为900次

var tweet_arr = [];
for(j in data_tweets){
    var tweet_time = timeParser(data_tweets[j]['timestamp_s']);
    var point_time = timeParser(d.timestamp);
    var diff = point_time.getTime() - tweet_time.getTime();
    if(diff<=1800000 && diff>=-1800000) {
        tweet_arr.push(data_tweets[j]);
    } else {
        var tweet_list = []
        d3.selectAll(".panel-body")
            .data(tweet_list)
            .exit()
            .remove();
    }
}
twitterapi.fetch().getTweets(tweet_arr, tweet_urls[0], tweet_urls[1]);
此函数检查x轴上最近点之间的差异,并检查我收集的tweet数据,如果半小时内有一个,则将其添加到一个名为tweet_arr的数组中,然后将其传递到我的fetch函数中,该函数对Flask框架进行AJAX调用,我在该框架中按ID运行GET请求

理想情况下,我希望它做的是进行一些检查,如果获取特定tweet的请求已在(比如)最后5秒内执行,则不要运行fetch函数


我该怎么做呢?

看看Underline.js中的debounce和throttle:,

以下是一篇关于取消公告请求的简短帖子:

有关油门和去盎司的比较,请参阅

您需要在一个单独的函数中定义获取逻辑,并将其放入u.debounce

看看这个例子:


更新:我尝试过使用underline.js的debounce函数,甚至有一秒的延迟,但它的触发频率似乎仍远高于此。var lazyFetch=..debouncefunction{twitterapi.fetch.getTweetstweet_arr,tweet_url[0],tweet_url[1]},1000;是的,我希望它能起作用,我也试过了,但它似乎仍在不断地发射,我不确定到底是怎么回事。我在上面的评论中添加了用于消除抖动的代码。下面是一个工作示例:
const fetchFromTwitter = function(s) { console.log(s) }
var lazyFetch = _.debounce(fetchFromTwitter, 100)

lazyFetch('This is')
lazyFetch('is')
lazyFetch('gonna be')
lazyFetch('legen ... ')
lazyFetch('wait for it')
lazyFetch('... dary')
lazyFetch('LEGENDARY')