2017-02-17 18 views
0

Скажет, у меня есть службы обмена сообщений, который планирует сообщения друзей,Клирингового таймаут для одного элемента в массиве - яваскрипт

И пользователь будет загружать их друг, вместе с когда они хотят, чтобы отправить их

Но скажем, 10000 миллисекунд позже после планирования, загрузчик хочет взять bob из цикла (for). Как взять bob out, не отменяя планировщик. Или есть лучший способ сделать это? (Его на сервере узла)

var friends = [‘John’, ‘bob’, ‘billy’, ‘dan’]; 

for (i in friends) { 
    setTimeout(function(){ 
     sendMessage(friend[i]) 
    },3000000) 
} 

Я чувствую, что есть гораздо лучший способ сделать это, но не нашел ничего

Спасибо, нового для JS и ценю помощь!

+0

NB: Я думаю, что у вас будет проблема с фигурными цитатами. – trincot

ответ

0

Путь у вас есть код, все таймауты истекает в то же время.

Вместо этого вы можете начать только следующий таймаут, когда текущий закончится. В следующей демонстрации «Билли» удаляется во время отправки сообщений с интервалом в 1 секунду. И в самом деле, Билли не получает сообщение:

var friends = ['John', 'Bob', 'Billy', 'Dan']; 
 

 
(function loop(i) { 
 
    setTimeout(function(){ 
 
     if (i >= friends.length) return; // all done   
 
     sendMessage(friends[i]); 
 
     loop(i+1); // next 
 
    }, 1000); 
 
})(0); // call the function with index 0 
 

 
function sendMessage(friend) { // mock 
 
    console.log('send message to ' + friend); 
 
} 
 

 
// now remove 'Billy' after 2.5 second 
 
setTimeout(function() { 
 
    console.log('remove ' + friends[2]); 
 
    friends.splice(2, 1); 
 
}, 2500);

0

Одним из вариантов может быть то, что вы добавить флаг, если пользователь должен быть удален из получателей, и если флаг на вас пропустить этап отправки к этому человеку. Затем, по возможности, пользователи с чистой маркировкой. например

if (!friends[i].isRemoved) { 
    setTimout..... 
} 

Другим вариантом является то, что вы определяете индивидуальные таймеры для каждого друга, а затем можете отменить, кто бы вы ни пожелали.