Javascript clearTimeout帮助

Javascript clearTimeout帮助,javascript,Javascript,大家好这是我的代码: var stopKick; let timerID = setInterval(function() { // function kicked() { setTimeout( room.kickPlayer(player.id , " Lütfen hesabını onayla -> [ public.haxlife.com ] " , false) , 30000 ); clearInterval(timerID); } $.ajax({ url:

大家好这是我的代码:

var stopKick;
let timerID = setInterval(function() {
  // function kicked() { setTimeout( room.kickPlayer(player.id , " Lütfen hesabını onayla -> [ public.haxlife.com ] " , false) , 30000 ); clearInterval(timerID); }
  $.ajax({
    url: 'http://localhost/BOT/publicBOT/kesinOnay.php',
    type: 'POST',
    data: {
      nickname: nick
    },
    success: function(data) { // Kicklenme sorununda kaldın!
      console.log(data);
      if (data == 'dogrulanmamis') {
        stopKick = setTimeout(function() {
          console.log("denem")
        }, 30000)
      } else {
        clearTimeout(stopKick);
        room.sendChat("Profilin Eşleşti İyi Oyunlar , " + player.name, player.id);
        clearInterval(timerID);
      }
    },
    error: function() {
      console.log("eslesmede hataa");
    }
  });
}, 3000);

但是这个clearTimeout不起作用

问题是每次AJAX调用发生时,您都会创建一个新的计时器,
data='dogrulanmamis'
是真的。如果条件为false,则仅取消最后一个条件

您应该只启动计时器一次,或者在启动新计时器之前取消旧计时器。下面是第一种方法

var stopKick;
let timerID = setInterval(function() {
  $.ajax({
    url: 'http://localhost/BOT/publicBOT/kesinOnay.php',
    type: 'POST',
    data: {
      nickname: nick
    },
    success: function(data) { // Kicklenme sorununda kaldın!
      console.log(data);
      if (data == 'dogrulanmamis') {
        if (!stopKick) {
          stopKick = setTimeout(function() {
            console.log("denem")
          }, 30000);
        }
      } else {
        clearTimeout(stopKick);
        room.sendChat("Profilin Eşleşti İyi Oyunlar , " + player.name, player.id);
        clearInterval(timerID);
      }
    },
    error: function() {
      console.log("eslesmede hataa");
    }
  });
}, 3000);

您需要调试并找出原因。console.log()是你的朋友你的
setTimeout
cleartimout
永远不会被调用,因为它们在
if/else
的不同块中-你能描述一下你正在寻找的行为吗?如果
clearTimeout()
没有被调用,然后
data==“dogrulanmamis”
必须始终为真。您需要提供更多信息,例如您试图实现的目标。在没有任何上下文的情况下,我查看代码并想知道您对它的期望是什么。在PHP中,将查询数据库,如果用户正确查询数据库,将打印“basardindostum”并设置Timeout not work,但如果不正确,将在调用互斥锁30秒后打印“not verified”。谷歌。这将有助于你在未来认识和避免这类问题。答案很好,顺便说一句@Barmar@JoshWulf它不是真正的互斥。互斥体用于协调并发进程/线程对公共资源的访问。是的,从某种意义上说,“互斥体是一种二进制标志,用于通过确保关键代码段内的互斥来保护共享资源。”这可以防止计时器被多次调用
success
激活。这是为了防止多个并发访问,您的概括太过分了。