2017-07-29 50 views
0

後終止的定時功能我創建了一個用戶有N個時間做某事的數組。時間到了之後,它們將從用戶數組中移除。但是,我認爲這不是一種合法的方式,有什麼幫助? 編輯:每個用戶將有獨立的時間。創建一個在

var allowedUsers = []; 
 
allowedUsers.push(
 
    setInterval(function(name){ 
 
\t this.name = name; 
 
\t }, 5, function(){ 
 
\t \t \t allowedUsers.splice(allowedUsers.indexOf(name),1); 
 
\t \t \t client.action(channel, "Times up! " + name); 
 
\t }) 
 
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

如果您在數據庫中需要此功能,請勿切換標誌,設置「過期」時間戳,根據當前時間測試時間戳。如果你需要清理數組,那麼你可以通過過期來減少它,而不必擔心跟蹤所有的狀態。如果它在內存中,用一些方法爲用戶創建一個'class'來跟蹤它 –

回答

0
  1. 什麼是時間單位?
  2. 它只是一個計數?
  3. 它在幾秒鐘內?
  4. 你是否按照它們的時間片來排列數組?
  5. 新用戶是否隨機添加?

這是我的建議,爲一個簡單的情況。

創建用戶數組,然後是時間片。

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秒,也許,或者如果你想少開始,循環數組每兩個X或X毫秒。然後再調用Xs。

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(); 

或者做你想要的數組修改。也許只需將它們標記爲不活動並跳過不活動的。

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; 
} 
+0

每個用戶將有獨立的時間 –

+0

好吧,讓我補充一點 – 2017-07-29 01:12:43

+0

我想你可以做另一個int數組並添加相同的方式,但那是很多數組 –