Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环不适用于间隔_Javascript_Node.js_Loops_Firebase_Twitter - Fatal编程技术网

Javascript 循环不适用于间隔

Javascript 循环不适用于间隔,javascript,node.js,loops,firebase,twitter,Javascript,Node.js,Loops,Firebase,Twitter,我正在使用Firebase和TwitterAPI创建一个Twitter机器人,以解除对非活动帐户的跟踪 这是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; fu

我正在使用Firebase和TwitterAPI创建一个Twitter机器人,以解除对非活动帐户的跟踪

这是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

});
在候机楼,你可以看到间隔时间不起作用

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.
在这种情况下,我能做些什么才能让循环像以前一样工作?我希望每20秒就释放一把不活动的twitter帐户,因为我不想掉入速率限制


提前感谢:-)

问题在于firebase的
.on
监听器每次
T.post
结束时都会被调用,因为您正在从
移除到\u unfollow/

因此,每次
T.post
结束时,您都会创建一个额外的
setTimeout
循环,如果让该代码运行几分钟,您将向twitter执行数千个请求


改用
。一次
将解决您的问题。在快照中的所有用户都被释放后,您应该向firebase请求另一个集合。

确切的问题是什么?
T.post
会抛出错误吗?@MarcosCasagrande T.post不会抛出错误。但是循环不能与时间间隔一起工作。
timedLoop
只运行一次,或者ir从不运行?按需要连续工作。但不是每隔20秒。我不明白你说的是什么意思:它只是不断地疏远人们。你不想让它对人展开跟踪吗?它会尝试对同一个人展开两次跟踪,或者实际问题是什么?一定是这样,尽管我从未使用过firebase:)我不明白你对
的意思,在快照中的所有用户都展开跟踪之后,您应该调用request Other set to firebase。
处理该快照后,您可能有更多用户要取消跟踪,您应该调用:
firebase.database().ref(“to_unfollow/”+settings.PERSON\u TWITTER\u HANDLE)。再次
查看是否有更多用户输入错误,
您应该向firebase请求另一个设置

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.