带有延迟的循环每次应运行5次

loop with delay should run 5 times each time

本文关键字:运行 5次 循环 延迟      更新时间:2023-09-26

我有一个每10秒运行一次的函数,它应该一直运行到j=50。一切正常。但我想要的是,在每个间隔中,某个东西被执行5次,5被添加到j中。第一个循环按照它应该执行的方式执行,但接下来的两个循环没有也没有接缝来执行代码5次,但更多次,然后它停止了。

不确定我是否足够清楚,但也许看一眼代码就知道我做错了什么?

我的代码:

function botsLoop() {          
    setTimeout(function () {
        for (var startloop = 0; startloop <= 5;startloop++) {
            var dateTime = new Date();  
            ajaxChat.messagedata = ({
                "messageinfo": {
                    "userID": botUserNodes[j].userID,
                    "userName": botUserNodes[j].userName,
                    "userRole": botUserNodes[j].userRole,
                    "UserGender": botUserNodes[j].UserGender,
                    "Profile_Provider": botUserNodes[j].ProfilePro,
                    "Profile_user_name": botUserNodes[j].Profilename,
                    "UserRegion": botUserNodes[j].nameregion,
                    "channelID": botUserNodes[j].channel,
                    "istor": botUserNodes[j].IsTor,
                    "channelName": botUserNodes[j].channelName,
                    "text": 'userenterinchat,' + botUserNodes[j].lat + ', ' + botUserNodes[j].lng + ', ' + botUserNodes[j].namecity + ', ' + botUserNodes[j].nameregion,
                    "dateTime": dateTime
                }
            });
            Onlinelistupdate = {
                "onlinelist": {
                    "userID": botUserNodes[j].userID,
                    "userName": botUserNodes[j].userName,
                    "UserGender": botUserNodes[j].UserGender,
                    "Profile_Provider": botUserNodes[j].ProfilePro,
                    "Profile_user_name": botUserNodes[j].Profilename,
                    "Profile_user_picture": botUserNodes[j].profilepicture,
                    "UserRegion": botUserNodes[j].nameregion,
                    "channelID": botUserNodes[j].channel,
                    "istor": botUserNodes[j].IsTor,
                    "channelName": botUserNodes[j].channelName,
                    "camonoff": botUserNodes[j].camonoff,
                    "ABOUTME": botUserNodes[j].ABOUTME,
                    "lat": botUserNodes[j].lat,
                    "lng": botUserNodes[j].lng,
                    "namecity": botUserNodes[j].namecity,
                    "nameregion": botUserNodes[j].nameregion,
                    "ismobile": botUserNodes[j].ismobile,
                    "namecountry":  botUserNodes[j].namecountry
                }
            };   
            sendBotMsg(ajaxChat.messagedata, ajaxChat.channelID,Onlinelistupdate);      
            j++;   
            if (j < 50) {          
                botsLoop();            
            }
        }
        startloop = 0;
    }, 10000)
}

解决方案

    function botsLoop() {
              setTimeout(function () {
                if (j < 50) {                     
                  var times = 5;
                  for (var i=0; i < times; i++){
                    console.log('inner loop: ' + (i + 1));
                    j++;
             var dateTime = new Date();  
             ajaxChat.messagedata = ({"messageinfo":{ "userID": botUserNodes[j].userID, "userName": botUserNodes[j].userName, "userRole": botUserNodes[j].userRole,
              "UserGender": botUserNodes[j].UserGender, "Profile_Provider": botUserNodes[j].ProfilePro, "Profile_user_name": botUserNodes[j].Profilename, "UserRegion": botUserNodes[j].nameregion,
             "channelID": botUserNodes[j].channel, "istor": botUserNodes[j].IsTor, "channelName": botUserNodes[j].channelName, "text": 'userenterinchat,' + botUserNodes[j].lat + ', ' + botUserNodes[j].lng + ', ' + botUserNodes[j].namecity + ', ' + botUserNodes[j].nameregion, "dateTime": dateTime}});
             Onlinelistupdate = {"onlinelist":{ "userID": botUserNodes[j].userID, "userName": botUserNodes[j].userName,
             "UserGender": botUserNodes[j].UserGender, "Profile_Provider": botUserNodes[j].ProfilePro, "Profile_user_name": botUserNodes[j].Profilename, "Profile_user_picture": botUserNodes[j].profilepicture, "UserRegion": botUserNodes[j].nameregion,
             "channelID": botUserNodes[j].channel, "istor": botUserNodes[j].IsTor, "channelName": botUserNodes[j].channelName, "camonoff": botUserNodes[j].camonoff, "ABOUTME": botUserNodes[j].ABOUTME, 
              "lat": botUserNodes[j].lat, "lng": botUserNodes[j].lng, "namecity": botUserNodes[j].namecity, "nameregion":  botUserNodes[j].nameregion, "ismobile": botUserNodes[j].ismobile,  "namecountry":  botUserNodes[j].namecountry}};   
            sendBotMsg(ajaxChat.messagedata, ajaxChat.channelID,Onlinelistupdate);    
                  }
                  botsLoop();
                }
              }, 10000);
            }

这可能对你有用:

var j = 0;
function botsLoop() {
  setTimeout(function () {
    if (j < 50) {    
      console.log('timeout function');
      var times = 5;
      for (var i=0; i < times; i++){
        console.log('inner loop: ' + (i + 1));
        j++;
      }
      botsLoop();
    }
  }, 10000);
}
botsLoop();

我认为你可以自己将其应用于你的需求。

在第一次调用bots循环时将初始值传递给j,保留该值:

function botsLoop(j) {          
    setTimeout(function () {
        for (var startloop = 0; startloop <= 5;startloop++) {
            var dateTime = new Date();  
            ajaxChat.messagedata = ({
                "messageinfo": {
                    "userID": botUserNodes[j].userID,
                    "userName": botUserNodes[j].userName,
                    "userRole": botUserNodes[j].userRole,
                    "UserGender": botUserNodes[j].UserGender,
                    "Profile_Provider": botUserNodes[j].ProfilePro,
                    "Profile_user_name": botUserNodes[j].Profilename,
                    "UserRegion": botUserNodes[j].nameregion,
                    "channelID": botUserNodes[j].channel,
                    "istor": botUserNodes[j].IsTor,
                    "channelName": botUserNodes[j].channelName,
                    "text": 'userenterinchat,' + botUserNodes[j].lat + ', ' + botUserNodes[j].lng + ', ' + botUserNodes[j].namecity + ', ' + botUserNodes[j].nameregion,
                    "dateTime": dateTime
                }
            });
            Onlinelistupdate = {
                "onlinelist": {
                    "userID": botUserNodes[j].userID,
                    "userName": botUserNodes[j].userName,
                    "UserGender": botUserNodes[j].UserGender,
                    "Profile_Provider": botUserNodes[j].ProfilePro,
                    "Profile_user_name": botUserNodes[j].Profilename,
                    "Profile_user_picture": botUserNodes[j].profilepicture,
                    "UserRegion": botUserNodes[j].nameregion,
                    "channelID": botUserNodes[j].channel,
                    "istor": botUserNodes[j].IsTor,
                    "channelName": botUserNodes[j].channelName,
                    "camonoff": botUserNodes[j].camonoff,
                    "ABOUTME": botUserNodes[j].ABOUTME,
                    "lat": botUserNodes[j].lat,
                    "lng": botUserNodes[j].lng,
                    "namecity": botUserNodes[j].namecity,
                    "nameregion": botUserNodes[j].nameregion,
                    "ismobile": botUserNodes[j].ismobile,
                    "namecountry":  botUserNodes[j].namecountry
                }
            };   
            sendBotMsg(ajaxChat.messagedata, ajaxChat.channelID,Onlinelistupdate);      
            j++;   
            if (j < 50) {          
                botsLoop(j);            
            }
        }
        startloop = 0;
    }, 10000)
}
botsLoop(0); // when called first time