我正在尝试使用Twitter API进行转发。而且由于Twitter每天限制2400次操作,我决定每40秒将转推限制为一次。 我正在使用流媒体API {/ 3}}。
我的问题是它不断传输console.log而不是使用setInterval。
通过流我的意思是它多次输出console.log而不是一次。
function hastagRetweet() {
var stream = T.stream('statuses/filter', { track: ['#hastag']})
stream.on('tweet', function (tweet,error) {
var retweetId = tweet.id; // id
var retweetId_str = tweet.id_str;
var tweetTextRetweet = tweet.text; // tweet text
function twInterval() {
console.log('INFO ------- ',tweet.id);
console.log('INFO ------- ',tweet.text);
};
setInterval(twInterval, 1000 * 40);
});
}
任何方式获取变量数据retweetId,retweetId_str,tweetTextRetweet在stream.on旁边,然后将它们插入到mysql表中,以便每隔40秒它检查变量固定数据并执行console.log?
答案 0 :(得分:1)
这里有很多问题:
您正在尝试在事件处理程序中启动间隔计时器。这意味着每次事件发生时你都会尝试启动一个新的间隔计时器,他们会堆积起来。
即使你成功启动了一个间隔计时器,每个人都不会改变它的输出,因为它的范围内的变量永远不会改变,因为它在给定的函数中启动并且参数为这个功能是他们第一次被调用时的功能。该函数的后续调用将启动一个新函数,而不是更改函数先前调用的参数。
你甚至没有正确地开始你的间隔。事实上,你所做的只是调用函数并将它的返回值传递给// TODO: verify user
,它什么都不做。
如果目标只是向每个流setInterval()
事件输出到控制台,那么可能你想要的就是:
tweet
您无法在function hastagRetweet() {
var stream = T.stream('statuses/filter', { track: ['#hastag']})
stream.on('tweet', function (tweet,error) {
var retweetId = tweet.id; // id
var retweetId_str = tweet.id_str;
var tweetTextRetweet = tweet.text; // tweet text
console.log('INFO ------- ',tweet.id);
console.log('INFO ------- ',tweet.text);
});
}
处理程序之外获取这些变量。它是异步回调,它们可靠存在的唯一位置是在该处理程序中。
如果您可以更详细地描述您尝试实现的最终结果,我们可能会更具体地帮助您。如果你想每40秒做一些事情,那么你可能需要收集一些集合中的数据(可能是一个数组),然后每40秒评估你最近收集的数据。
这是一种收集数组中事件然后每40秒评估一次的方法:
.on()
请注意,拨打function hastagRetweet() {
var stream = T.stream('statuses/filter', { track: ['#hastag']});
var tweets = [];
stream.on('tweet', function (tweet,error) {
tweets.push({id: tweet.id, str: tweet.id_str, text: tweet.text});
});
setInterval(function() {
// evaluate the tweets in the tweets array every 40 seconds
// do something with them
for (var i = 0; i < tweets.length; i++) {
// tweets[i].id
// tweets[i].str
// tweets[i].text
}
// reset the tweets array
tweets.length = 0;
}, 40 * 1000);
}
后,它将永久运行。