限制获取请求(D3.JS/Twitter API)



我当前正在使用d3.js,并已将图表从聆听鼠标/鼠标out到mousemove进行了修改。这在图表中带来了很多问题,但没有比我的GET statuses/show/:id请求的信息。

以前,我的图表上会有积分来悬停,如果在该点的半小时内有一条推文(从后端的推文db(,它将发送get请求以获取该推文。

我现在的问题是,因为我在图表上而不是鼠标上的这些点,而不是在15分钟的窗口中使用Mouseemove,而不是鼠标射击,而Get请求则限制为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()函数中有一个ajax调用烧瓶框架,我通过ID运行我的获取请求。

我理想地希望它要做的就是检查一下,如果要提取特定推文的请求,则在最后5秒钟以前,请勿运行fetch()函数。

我将如何做这样的事情?

从underscore.js:http://underscorejs.org/#debounce中看一下调试和油门http://underscorejs.org/#throttle

这是一篇关于辩论请求的好帖子:https://www.google.de/amp/amp/s/davidwalsh.name/javascript-debouse-function/amp

有关节气门和调试之间的比较,请参见https://gist.github.com/makenova/7885923

您需要在单独的功能中定义您的获取逻辑,然后将其放入_.debounce

请查看此示例:https://codepen.io/anon/pen/eqwzpz?editors=0011

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')

最新更新