创建一个在之后终止的定时函数

时间:2017-07-29 01:07:20

标签: javascript node.js

我创建了一个有N个时间做某事的用户数组。时间结束后,它们将从用户数组中删除。但是,我不认为这是一种合法的做法,任何帮助? 编辑:每个用户都有独立的时间。



var allowedUsers = [];
allowedUsers.push(
  setInterval(function(name){
	this.name = name;
	}, 5, function(){
			allowedUsers.splice(allowedUsers.indexOf(name),1);
			client.action(channel, "Times up! " + name);
	})
 );

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

为每个用户创建一个对象或赋值为allowed。我将创建一个数组并使其第一个索引的值等于一个字符串。

var allowed = "allowed";
var notallowed = "notallowed";    
var user1 = [allowed, ....]; //other elements there
var user2 = [allowed, ....];

function userAction(user){
  while(user[0] == allowed){
  // code here
  }
setTimeout(noAllow(user), 10000);
}


function noAllow(user){
user[0] = notallowed;
}

答案 1 :(得分:0)

  1. 时间单位是多少?
  2. 这只是一个计数吗?
  3. 是几秒钟?
  4. 您是按照时间片保持数组排序吗?
  5. 新用户是否随机添加?
  6. 这是我的建议,一个简单的案例。

    创建用户数组,并且它们是时间片。

    let users = [{id:1, timeSliceInSeconds:5}, {id:2, timeSliceInSeconds:1}, ...]
    

    在程序开头使用Date.prototype.getTime()

    let startTime = new Date().getTime(); //time since 1970 in ms.
    

    如果需要,可以使用setTimeout 1秒或更短时间,每隔Xs或Xms循环一次数组。然后再次召唤自己。

    function check(){
        let elapsedTimeInSeconds = ((new Date()).getTime() - startTime)/1000, tempArray = [];
    
        users.forEach(function(user){
            if(elapsedTimeInSeconds < user.timeSliceInSeconds){
                 tempArray.push(user);
            }
        });
    
        users = tempArray;
    
        if(users.length()){
            setTimeout(check, 1000);
        }
    }
    
    check();
    

    或者根据需要进行数组修改。也许只是将它们标记为非活动状态并跳过不活动状态。