带有延迟的循环每次应运行5次
loop with delay should run 5 times each time
我有一个每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
相关文章:
- 带有延迟的循环每次应运行5次
- 使用每500ms运行一次的jquery函数是个好主意吗
- For循环在Jquery中只运行一次
- Append元素在运行两次函数后不显示
- 使函数只运行一次(Javascript)
- 更改路由后,运行一次js脚本
- 只运行一次提取的脚本
- 可能只在for循环内部运行一次代码块
- 我的所有代码在使用Webpack编译时都会运行两次
- 在Flask中使用.getJSON请求时,只运行一次命令
- 数据互绑定问题:转换器只运行一次,无法绑定元素的 ID
- setInterval 只在对象方法上运行一次
- 如何在 window.setInterval 中每分钟运行一次 getJSON 函数
- Javascript在不打算运行的情况下运行多次
- Cordova(Ionic):Splashscreen只在Android上运行一次
- jQuery事件将只运行一次
- 如果发现任何数据,如何停止每7秒运行一次的函数
- 计划每60秒运行一次代码
- 事件只运行一次
- MEANIO群集(共4个)对于计划作业仅运行一次