• If you need help or want to discuss things, you now can also join us on our Discord Server!
  • A first preview of the unlimited version of SinusBot can be found in the Upcoming Changes thread. A version for Windows will follow, but we don't have a release date, yet.

DE Timer in Javascript

Stefan77

Donor
is awesome!
Hallo,

Ich versuche die Timer in JS etwas zu verstehen.

Wenn ich jetzt eine Funktion habe
Code:
function timer()
{
myTimer = setTimeout(clear_it, 1000);
}

Wird dann jedesmal ein neuer Timer gestartet wenn ich die Funktion aufrufe?
Die Variable myTimer zählt auf jedenfall hoch. Daher gehe ich davon aus, dass ich die Timer auch wieder beenden muss.
Jetzt hätte ich einfach ein clearInterval(myTimer); an jede erdenkliche Stelle zum Timer beenden gemacht.

Heißt das dann, dass ich keine unnötigen Timer mehr habe oder habe ich dann prinzipiell etwas falsch verstanden?
 

Multivitamin

Well-Known Member
Tier III
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
Im Normalfall solltest du immer ein clearInterval aufrufen bevor du einen timer einer variable zuweist,
du kannst zwar mehrfach setTimeout's auf eine Variable zuweisen jedoch werden diese in dem Sinne nicht überschrieben sondern einfach angefügt

PS clearInterval ist für setInterval und clearTimeout ist für setTimeout
 

Stefan77

Donor
is awesome!
Was genau versteht man dann unter "angefügt"? Wenn ich jetzt den Timer also 10 mal starte, dann führt er ihn jede Sekunde aus, bis er 10x ausgeführt wurde. Sprich die Dauer sind dann 10 Sekunden?

Edit:
Also ich hab immernoch das Problem, dass die Variable "myTimer" hochzählt. Ist das gewollt?
Eigentlich habe ich es so verstanden, wie du oben geschrieben hast, dass der Timer einer Variable fest zugewiesen wird. Allerdings startet mein Timer bei myTimer = 4; und jedesmal wenn ich
Code:
    function clear_timer() {
    clearTimeout(myTimer);
    myTimer = setTimeout(clear_it, 3600 * 1000);
    }
das so aufrufe, zählt die Variable myTimer um 1 hoch.
 
Last edited:

Multivitamin

Well-Known Member
Tier III
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
Hab mich ehrlich gesagt noch nie darum gekümmert was eine timeout funktion zjrück gibt, aber wenn du die funktion clear_timer 10x so ausführst wird die funktion clear_it nach 1h 10 mal aufgerufen
 
Ist es möglich (in einem Sinusbot Script) einem setTimeout Parameter mitzugeben? Ich habe den klassischen Weg bereits probiert, aber erhalte immer nur den Wert <nil>. Ich benötige dies, da ich in einer Schleife die Lautstärke bis zu einem Punkt immer weiter erhöhen möchte um einen Fade-Effekt zu erhalten.

Mein Code:
JavaScript:
var newVolume = 40;
var time = 1000;

//Ältere Methode
setTimeout(setVolume, time, newVolume);

function setVolume(volume) {
    console.log(volume);
}

Ausgabe:
Code:
2018-06-27T18:04:57+02:00 testscript :83 <nil>
 

Multivitamin

Well-Known Member
Tier III
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
Code:
var engine = require("engine")
setTimeout(setVolume.bind(null, 40), 1000)

function setVolume(volume) {
    engine.log(volume)
}

EDIT console.log existiert nicht im sinusbot
 
Ahh cool, also kann man den Kontext mitgeben? Dann könnte man eine Objektinstance mitgeben und die Callback-Function könnte auf die Instance-Parameter zugreifen?
 
Last edited:
Top