setInterval 1x sofort und dann periodisch ausführen
suit
- javascript
0 Kai3450 suit0 Kai345
1 Gunnar Bittersmann0 Kai345
Ganz blöde Frage: ich hab hier ein kleines Script welches "sofort" und dann alle 10 Sekunden laufen soll:
function foo() {
// something
}
foo();
setInterval(function() { foo(); }, 10000);
Was mich hier stört ist, dass ich hier eine Funktion schreibe muss, diese Aufrufe und dann mit setInterval nochmal aufrufen muss
Wenn ich das hier mache
setInterval(
function() {
// something
},
10000
);
habe ich das Problem, dass das erstmalige Ausführen erst nach 10 Sekunden passiert - gibt es hier ggf. etwas, dass ich übersehen habe?
[latex]Mae govannen![/latex]
Ganz blöde Frage: ich hab hier ein kleines Script welches "sofort" und dann alle 10 Sekunden laufen soll:
function foo() {
// something
}foo();
setInterval(function() { foo(); }, 10000);
>
> Was mich hier stört ist, dass ich hier eine Funktion schreibe muss, diese Aufrufe und dann mit setInterval nochmal aufrufen muss
Falls die Funktion nicht anderweitig aufgerufen wird, würde ich
~~~javascript
function foo () {
// stuff
setTimeout(foo, 10000);
}
foo();
schreiben.
Stur lächeln und winken, Männer!
Kai
Falls die Funktion nicht anderweitig aufgerufen wird, würde ich
Wird sie nicht.
function foo () {
// stuff
setTimeout(foo, 10000);
}foo();
>
> schreiben.
Ich gehe davon aus, dass setTimeout mehr Ressourcen frisst als setInterval - man möge mich eines Besseren belehren :) - in Summe soll dieses Intervall aber nicht 1x gesetzt werden sondern mehrfach - unterm Strich wirds zwar vermutlich egal sein, aber ich stell mir das ungünstig vor wenn das Ding nicht alle 10 Sekunden sondern z.B. alle 125 ms aufgerufen wird (was in meinem Fall nicht zutrifft).
[latex]Mae govannen![/latex]
Ich gehe davon aus, dass setTimeout mehr Ressourcen frisst als setInterval - man möge mich eines Besseren belehren :)
Es gab mal irgendwo (ich glaube in comp.lang.javascript) eine Diskussion bezüglich setInterval. Dort wurde angeführt, daß diese Intervalle bzw. die Ausführung der Funktion bei extrem hoher Auslastung gestackt würden und dann wenn die Ressourcen wieder frei würden alle direkt hintereinander ausgeführt würden. Ob das stimmt, jemals gestimmt hat oder nur auf alte JS-Engines zutraf weiß ich nicht mehr, ist einige Jahre her.
Stur lächeln und winken, Männer!
Kai
@@Kai345:
nuqneH
Falls die Funktion nicht anderweitig aufgerufen wird, würde ich
function foo () {
// stuff
setTimeout(foo, 10000);
}foo();
>
> schreiben.
Warum nicht gleich so?
~~~javascript
(function foo () {
// stuff
setTimeout(foo, 10000);
}());
Qapla'
[latex]Mae govannen![/latex]
@@Kai345:
nuqneH
Falls die Funktion nicht anderweitig aufgerufen wird, würde ich
function foo () {
// stuff
setTimeout(foo, 10000);
}foo();
> >
> > schreiben.
>
> Warum nicht gleich so?
>
> ~~~javascript
(function foo () {
> // stuff
> setTimeout(foo, 10000);
> }());
Weil das etwas anderes ist (bzw. sein kann) In deiner Version wird die Funktion direkt von der JS-Engine ausgeführt, man kann den Zeitpunkt nicht beeinflussen. In meinem Fall wird foo() zu einem bestimmten Zeitpunkt (der viel später sein kann, bspw. anhand einer Nutzer) kontrolliert aufgerufen. Daß ich foo() direkt unter der Funktion als Aufruf notiert habe, ist eher exemplarisch anzusehen.
Stur lächeln und winken, Männer!
Kai
@@Kai345:
nuqneH
In deiner Version wird die Funktion direkt von der JS-Engine ausgeführt
Das war suits Anliegen, AFAIS.
Qapla'
In deiner Version wird die Funktion direkt von der JS-Engine ausgeführt
Das war suits Anliegen, AFAIS.
Ja, war es :) aber Bedenken gegenüber setTimeout wurden damit nicht zerstreut :)