Я создаю бота Twitter, используя Firebase и Twitter API, чтобы отписаться от неактивных учетных записей.
Это был код Nodejs:
// Get the screen_names in `to_unfollow` table
firebase.database().ref("to_unfollow/" + settings.PERSON_TWITTER_HANDLE).on("value", function(snapshot) {
// Functional Loop
var i = 0;
function timedLoop() { // unFollows the user after every `x` seconds
/*=============================================>>>>>
= Thing to be done =
===============================================>>>>>*/
function snapshotToArray(snapshot) { // This function converts the Snapshot data into an array
var returnArr = [];
snapshot.forEach(function(childSnapshot) {
var item = childSnapshot.val();
item.key = childSnapshot.key;
returnArr.push(item);
});
return returnArr;
};
var screen_name_to_unfollow = snapshotToArray(snapshot)[i].key;
console.log(screen_name_to_unfollow);
/*= End of Thing to be done =*/
/*=============================================<<<<<*/
// Increase value of variable `i` by 1. (Increment)
i++;
// How many times to loop
if(i < 5000) {
setTimeout( timedLoop, 1000*20 ); // timedLoop();
}
}
timedLoop(); // Run the loop
});
Здесь мой цикл работал очень хорошо.Переменная screen_name_to_unfollow
регистрировалась в консоли через каждые 20 секунд.
Но когда я добавляю исполнительный код, чтобы отписаться от людей, цикл работает ... но не с интервалом времени.Это просто продолжает отписываться от людей.
Вот как выглядит мой код после:
// Get the screen_names in `to_unfollow` table
firebase.database().ref("to_unfollow/" + settings.PERSON_TWITTER_HANDLE).on("value", function(snapshot) {
// Functional Loop
var i = 0;
function timedLoop() { // unFollows the user after every `x` seconds
/*=============================================>>>>>
= Thing to be done =
===============================================>>>>>*/
function snapshotToArray(snapshot) { // This function converts the Snapshot data into an array
var returnArr = [];
snapshot.forEach(function(childSnapshot) {
var item = childSnapshot.val();
item.key = childSnapshot.key;
returnArr.push(item);
});
return returnArr;
};
var screen_name_to_unfollow = snapshotToArray(snapshot)[i].key;
console.log(screen_name_to_unfollow);
// UnFollow
T.post('friendships/destroy', { screen_name: screen_name_to_unfollow }, function (err, data, response) {
console.log('T.Post', new Date());
if(!err){
console.log(settings.PERSON_NICKNAME + " follower " + screen_name_to_unfollow + " unfollowed.");
// Create an `unfollowed` table and insert the screen_name there
firebase.database().ref("unfollowed").child(settings.PERSON_TWITTER_HANDLE).update({
[screen_name_to_unfollow]: {
connection: "unfollowed"
}
});
// Delete the screen_name from `to_unfollow` table
firebase.database().ref("to_unfollow/" + settings.PERSON_TWITTER_HANDLE).child(screen_name_to_unfollow).remove();
} else{
console.log(err);
}
});
/*= End of Thing to be done =*/
/*=============================================<<<<<*/
// Increase value of variable `i` by 1. (Increment)
i++;
// How many times to loop
if(i < 5000) {
setTimeout( timedLoop, 1000*20 ); // timedLoop();
}
}
timedLoop(); // Run the loop
});
В терминале видно, что интервалы не сработали.
T.Post 2018-05-31T02:11:27.234Z
Wesbos follower AnnSaid unfollowed.
T.Post 2018-05-31T02:11:27.914Z
Wesbos follower AnnyShivang unfollowed.
T.Post 2018-05-31T02:11:28.865Z
Wesbos follower AntJanus unfollowed.
T.Post 2018-05-31T02:11:29.888Z
Wesbos follower AnthonyCatonPR unfollowed.
T.Post 2018-05-31T02:11:30.975Z
Wesbos follower AppleLaa unfollowed.
T.Post 2018-05-31T02:11:31.733Z
Wesbos follower AsyrafDuyshart unfollowed.
Что я могу сделать в этой ситуации, чтобы цикл работал так, как он работал раньше? Я хочу отписываться от нескольких неактивных учетных записей Twitter через каждые 20 секунд, потому что я не хочу падать в предельном размере.
Заранее спасибо: -)