簡體   English   中英

setTimeout無法與twitter node.js api一起正常工作

[英]setTimeout not working properly with the twitter node.js api

我正在嘗試從文件中讀取內容,然后按順序鳴叫內容,即將一個大文件分成140個字符的塊。 我已經驗證了我代碼的其他組件是否可以正常工作。 起初,我只是在使用for循環,但在那種情況下,tweet的順序混亂了,而且不是連續的。 我認為這是由於負載平衡或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次。

任何指針都將受到歡迎。 我對Java語言非常陌生,(就像我的第一個真正的Javascript代碼一樣),所以如果我犯了一個明顯的錯誤,請對我輕松一點。 我也使用簡單的npm install twitter安裝的twitter軟件包

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM