javascript在每个for循环之间等待

时间:2017-08-10 19:57:23

标签: javascript node.js

我想在每个循环之间等待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);
    });
  }
}

1 个答案:

答案 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。最新的一个。