我想在每个循环之间等待3秒,我尝试了很多算法,但没有一个有效,有人可以帮忙吗?
for (i = 0; i < members.length; i ++) {
console.log(members[i].username+" "+i);
if (!members[i].can(Discordie.Permissions.General.KICK_MEMBERS, guildthingy)) {
var dm = members[i].openDM();
console.log(members[i].username+" "+i+" "+dm);
dm.then(function (value) {
value.sendMessage(message);
console.log("MESSAGE SENT");
},
function (value) {
console.log(value);
});
}
}
答案 0 :(得分:3)
你可以这样做。
for (i = 0; i < members.length; i ++){
(function(i){
setTimeout(function(){
console.log(members[i].username+" "+i);
if (!members[i].can(Discordie.Permissions.General.KICK_MEMBERS, guildthingy)){
var dm = members[i].openDM();
console.log(members[i].username+" "+i+" "+dm);
dm.then(function (value){
value.sendMessage(message);
console.log("MESSAGE SENT");
}, function (value){
console.log(value);
});
}
}, 3000 * i);//time in milliseconds
}(i));
}
setTimeout
函数将应用延迟。
立即调用的匿名函数(IIAF)是在循环中获取i
的当前值。
由于javascript后期绑定变量i
,因此setTimeout
中提供的函数的所有调用将获得相同的参数i
,如果不是那个IIAF。最新的一个。