2017-10-01 2 views
0

So habe ich ein großes function, das eine andere function löst alle 2-17 Sekunden, aber wenn ich versuche, es zu stoppen mit clearTimeout() es geht einfach weiter und ignoriert vollständig die clearTimeout().Ich kann irgendwie nicht aufhören meine setTimeout() Schleife

Das ist also meine Hauptfunktion:

var itemTimer; 
var stopTimeout; 

function major(){ 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
} 

Und dies ist meine Stopp-Funktion Timeout:

function stopTimer() { 
    clearTimeout(itemTimer); 
    clearTimeout(stopTimeout); 
} 

Danke für die Unterstützung

+0

Wo und wie nennst du 'stopTimer'? – Xufox

Antwort

1

Ihres setTimeout() falsch genannt wird; Sie rufen items() und major(). Stattdessen müssen Sie sie als Funktionen übergeben, die aufgerufen werden sollen.

Übergeben Sie die Klammern nicht an die Parameter und umbrechen Sie die Parameter nicht in Anführungszeichen.

Statt:

itemTimer = setTimeout('items()', itemTime);  
stopTimeout = setTimeout('major()',itemTime); 

Sie suchen:

itemTimer = setTimeout(items, itemTime); 
stopTimeout = setTimeout(major, itemTime); 

hoffe, das hilft! :)

+1

Während 'setTimeout (items, itemTime)' die bevorzugte Syntax ist, sind diese zwei Möglichkeiten, ein Timeout zu setzen, mehr oder weniger äquivalent. Das ist nicht das Problem. – Xufox

+0

@NichtEric - Super! Sobald Sie bestätigt haben, dass dies Ihr Problem löst, vergessen Sie nicht, [** als akzeptiert **] (https://stackoverflow.com/help/someone-answers) zu markieren, indem Sie auf das graue Häkchen unterhalb der Schaltfläche klicken Abstimmungsknöpfe - entfernt sie aus der Warteschlange "Unbeantwortete Fragen" und vergibt Reputation sowohl an den Fragesteller als auch an den Fragesteller. Sie können das 15 Minuten nach dem Stellen einer Frage tun. Natürlich sind Sie nicht verpflichtet, meine Antwort (oder die von jemand anderem) als richtig zu markieren, obwohl das Markieren einer Frage, wie gelöst, dazu beiträgt, dass die Dinge reibungslos ablaufen :) –

+0

Ok, danke, dass ich das nicht weiß, seit ich es bin relativ neu auf dieser Seite: D –

1

Ich denke, Ihre Timeouts stapeln sich. Sobald major einmal aufgerufen wird, erhalten die Variablen itemTimer und stopTimeout eine neue Timeout-Referenz zugewiesen. Daher wird es keine Möglichkeit geben, die Zeitüberschreitungen zu löschen, die zuvor festgelegt wurden. Wenn dies der Fall ist, sollte es eine einfache Lösung sein. Rufen Sie stopTimer als erste Anweisung in major:

function major(){ 
    stopTimer(); 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
} 
Verwandte Themen