gpt4 book ai didi

javascript - 控制台每 40 秒间隔输出一次不起作用

转载 作者:行者123 更新时间:2023-12-03 08:28:23 28 4
gpt4 key购买 nike

我正在尝试使用 Twitter API 来转发。由于 Twitter 每天的操作次数限制为 2400 次,我决定将转发限制为每 40 秒一次。我正在使用https://www.npmjs.com/package/twit使用流API。

我的问题是它连续流式传输 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 插入到 mysql 表中以便每 40 秒检查变量固定数据并执行 console.log 之外,还有什么方法可以在 stream.on 之外获取变量数据?

最佳答案

这里有多个问题:

  1. 您正在尝试在事件处理程序中启动间隔计时器。这意味着每次事件触发时,您都会尝试启动一个新的间隔计时器,并且它们会堆积起来。

  2. 即使您成功启动了一个间隔计时器,每个计时器也永远不会改变它的输出,因为当它在给定函数内启动时,它范围内的变量永远不会改变,并且该函数的参数是什么第一次被调用时就是这样。该函数的后续调用将启动一个新函数,不会更改先前调用该函数的参数。

  3. 您甚至没有正确开始间隔。事实上,您所做的就是调用该函数并将其返回值传递给 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);
});
}

您无法在 .on() 处理程序之外获取这些变量。它是一个异步回调,它们唯一可靠存在的位置是在该处理程序中。

如果您可以更详细地描述您想要实现的最终结果,我们可能可以提供更具体的帮助。如果您想每 40 秒执行一次操作,那么您可能需要在某个集合(可能是数组)中收集数据,然后每 40 秒评估您最近收集的数据。

下面是一种将事件收集到数组中然后每 40 秒评估一次的方法:

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

}

请注意,一旦调用 hastagRetweet(),它将永远运行。

关于javascript - 控制台每 40 秒间隔输出一次不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444437/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com