setTimeout与twitter node.js api无法正常工作

时间:2016-11-03 13:58:00

标签: javascript node.js twitter

我正在尝试从文件中读取并按顺序发送内容,即将大文件分成140个字符的块。我已经验证我的代码的其他组件正常工作。起初,我只是使用for循环,但在这种情况下,推文的顺序混乱,并不顺序。我认为这是因为负载均衡或Twitter服务器的东西,所以我决定使用setTimeout在代码中设置暂停。代码如下所示:

var Twitter = require('twitter');

var client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY,
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
});

const fs = require('fs');

var long_string = fs.readFileSync(__dirname + "/tweetfromhere.txt").toString();


var short_string = new String("");

const tweet_length = 140;

if (long_string.length%tweet_length === 0)
{
   var num_tweets = long_string.length/tweet_length;
}
else
{
    var num_tweets = Math.floor(long_string.length/tweet_length);
    console.log(num_tweets);
}

for (i = 0; i <= num_tweets; i++)
{
    short_string = long_string.substr(i*tweet_length, tweet_length);
    var stat = {status: short_string}
    setTimeout(function(){
    client.post('statuses/update', stat,  function(error, tweet,response) {
  if(error) 
  {
    console.log(error);
  }
  //console.log(tweet);  // Tweet body. 
  console.log(response);  // Raw response object. 
  });

}, 3000);
}

我知道setTimeout部分有问题,因为如果我只是尝试console.log它的输出,它不能正确地执行它,而只是将字符串的相同部分赋予n次推文。

欢迎提出任何指示。我是Javascript的新手,(这就像我的第一个真正的Javascript代码),所以如果我犯了一个明显的错误,请放轻松。我也使用简单npm install twitter

安装的twitter软件包

1 个答案:

答案 0 :(得分:0)

var request = require("request");


var stats = [];
for (i = 0; i <= 4; i++)
{
   stats.push({status: "yolo "+i});
}

var interval = setInterval(function(){
   if(!stats || stats.length == 0)
   {
       console.log("end");
       clearInterval(interval);
   }
   else
   {
       console.log("post "+stats[0].status);
       stats.splice(0,1);
   }
}, 3000);