我当前正在使用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')