如何暂停然后返回setInterval

时间:2017-11-17 17:00:11

标签: javascript

我正在修复公司正在开发的聊天中的一些错误。目前发生的事情是聊天窗口中加载的消息不属于所选聊天。 DB和Java方法中的查询是正确的。

由于正在使用setInterval(),我相信当我选择其他聊天时,如果已经触发了setInterval方法,则消息加载不正确。

有没有办法在加载邮件后触发setInterval并在点击其他聊天时暂停它?

我想要更新的方法: PS:没有setInterval,它不会显示传入的消息。只需再次点击聊天即可。

 function atualizarChat(idChat,nomeChat)
                    {
                        // Parametros
                            var dados = "Token=" + encodeURIComponent(token);
                            if(idMensagemUltima != 0){
                                dados += "&idChatMensagem="+encodeURIComponent(idMensagemUltima);
                            }                           
                            dados += "&idChat="+encodeURIComponent(idChat);

                            $.ajax({
                                type : "POST",
                                url : "/ListarMensagensServlet",
                                data : dados,
                                dataType : "json",
                                success : function(resultado) {

                                idChatEscolhido = idChat;

                                    // Troca nome do chat
                                    if(nomeChat != ''){
                                        $('#NomeUsuarioChat').text(nomeChat);
                                    }   

                                    var mensagemAntiga = idMensagemUltima;

                                    // Adiciona as mensagens na tabela
                                    for(mensagem of resultado){                 

                                        if(mensagem['bool'] == 1){
                                            mostrarSuaMensagem(mensagem['mensagem']);
                                        }
                                        else{
                                            mostrarRespostaMensagem(mensagem['mensagem']);
                                        }
                                        // troca data da ultima mensagem
                                        idMensagemUltima = mensagem['idChatMensagem'];
                                    }

                                    if(idMensagemUltima > mensagemAntiga){
                                        // Joga chat para baixo
                                        $('#CaixaDeChat').stop().animate({
                                            scrollTop: $('#CaixaDeChat')[0].scrollHeight
                                        }, 800);
                                    }                           
                                }


                            });                         
                    }                   

1 个答案:

答案 0 :(得分:0)

首先,请将您的问题移至Portuguese StackOverflow(pt.stackoverflow.com)。 关于您的解决方案,

我建议创建一个小函数来处理这种行为,你只需要创建一个setInterval并将它们的值设置为一个变量。

var interval = null;

var intervalHandler = function(status, yourFunction, intervalTime) {
   if(status) {
     interval = setInterval(yourFunction, intervalTime);
   }
   else {
     clearInterval(interval);
   }
}

因此,statusboolean变量,其值为true/false。值false将执行clearInterval条件,true将执行setInterval条件。

使用:

intervalHandler(true, yourFunction, 1000);  // for set

intervalHandler(false);  // for clear