Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

24.01.2018, 15:09

Hast du meinen Beitrag oben gelesen?
setInterval: Etwas immer wieder ausführen, z. B. jede Sekunde.
setTimeout: Etwas einmalig ausführen nach Ablauf einer gewissen Zeit, z. B. nach einer Sekunde.


Ja ich lese jeden Beitrag und hoffe viel von euch lernen zu koennen.
Aber irgendwie kann das doch nicht wirklich so sein, das die "setTimeout" etwas nur einmallig aufruft, weil man stellt dort doch die Anzahl an Millisekunden ein und nach Ablauf der Zeit ruft die "setTimeout" Funktion doch wieder die verlinkte Funktion auf, also es wird doch damit auch immer wieder wiederholt?

Deswegen ist das auch nicht so einfach zu verstehen, welche von beiden man benutzen soll, den die machen ja irgendwie das selber und so wie ich das verstanden habe, erzwingt "setInterval" eine Durchfuehrung des Codes wobei "setTimeout" irgendwie abwartet bis wieder alles bereit ist fuer den naechsten Durchlauf.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

22

24.01.2018, 15:11

Aber irgendwie kann das doch nicht wirklich so sein, das die "setTimeout" etwas nur einmallig aufruft, weil man stellt dort doch die Anzahl an Millisekunden ein und nach Ablauf der Zeit ruft die "setTimeout" Funktion doch wieder die verlinkte Funktion auf, also es wird doch damit auch immer wieder wiederholt?

Doch, genau so ist es aber. Ich sehe das Problem nicht.
Im einen Fall wird deine Funktion regelmäßig aufgerufen, z. B. jede Sekunde, im anderen Fall einmalig nach Ablauf der angegebenen Zeit und danach nicht mehr.

23

24.01.2018, 15:12

Geht auch (du solltest das XMLHttpRequest-Objekt aber innerhalb der Funktion erzeugen und nicht global), halt ohne jQuery. Wenn du eh schon jQuery nutzt, kannst du es auch für Ajax benutzen. jQuery ist bequemer, macht einige Magic im Hintergrund und versucht dich ein wenig vor inkonsistentem Verhalten der verschiedenen Browser zu schützen.


Wenn ich das "XMLHttpRequest" Objekt innerhalb der Funktion erstelle, wuerde das nicht auch dazu fuehren das es immer wieder neu erstellt wird, wenn ich diese Funktion dann mit "setTimeout" oder "setInterval" ofter aufrufen lasse?

Aber insgesamt wuerdest du doch eher zum Benutzen der Jquery Funktion raten, weil die einfach irgendwo ausgereifter ist oder?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

24

24.01.2018, 15:15

Wenn ich das "XMLHttpRequest" Objekt innerhalb der Funktion erstelle, wuerde das nicht auch dazu fuehren das es immer wieder neu erstellt wird, wenn ich diese Funktion dann mit "setTimeout" oder "setInterval" ofter aufrufen lasse?

Ja, macht aber nichts, da das alte Objekt in dem Moment gelöscht wird. So ist es einfach sauberer.

Aber insgesamt wuerdest du doch eher zum Benutzen der Jquery Funktion raten, weil die einfach irgendwo ausgereifter ist oder?

Ich würde jQuery nicht allein deswegen nutzen. Mittlerweile sollten sich alle großen Browser in dieser Hinsicht einigermaßen gleich verhalten. Wenn du jQuery aber ohnehin schon für andere Dinge nutzt, dann solltest du es auch dafür nutzen.

25

24.01.2018, 15:16

Aber irgendwie kann das doch nicht wirklich so sein, das die "setTimeout" etwas nur einmallig aufruft, weil man stellt dort doch die Anzahl an Millisekunden ein und nach Ablauf der Zeit ruft die "setTimeout" Funktion doch wieder die verlinkte Funktion auf, also es wird doch damit auch immer wieder wiederholt?

Doch, genau so ist es aber. Ich sehe das Problem nicht.
Im einen Fall wird deine Funktion regelmäßig aufgerufen, z. B. jede Sekunde, im anderen Fall einmalig nach Ablauf der angegebenen Zeit und danach nicht mehr.


Das kann doch aber nicht sein, ich benutze doch "setTimeout" und sehe doch das man damit ein regelmaessiges Aufrufen erzeugt, die Funktion welche ich an "setTimeout" uebergebe wird immer wieder neu aufgerufen, nach Ablauf der eingestellten Zeit, deswegen ist es hier etwas schwer zu verstehen, weil "setInterval" scheint das gleiche zu tun, aber irgendwo scheint es auch ein Unterschied zu geben.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

26

24.01.2018, 15:19

Das kann doch aber nicht sein, ich benutze doch "setTimeout" und sehe doch das man damit ein regelmaessiges Aufrufen erzeugt, die Funktion welche ich an "setTimeout" uebergebe wird immer wieder neu aufgerufen, nach Ablauf der eingestellten Zeit, deswegen ist es hier etwas schwer zu verstehen, weil "setInterval" scheint das gleiche zu tun, aber irgendwo scheint es auch ein Unterschied zu geben.

Nein, das ist definitiv nicht so.

Drück mal F12 und gib in der Konsole ein:

Quellcode

1
i = 0; setTimeout(function() { console.log("Aufruf Nr. " + (++i)); }, 1000);

--> nur eine einzige Ausgabe nach einer Sekunde

Und dann probier zum Vergleich:

Quellcode

1
i = 0; setInterval(function() { console.log("Aufruf Nr. " + (++i)); }, 1000);

--> jede Sekunde eine neue Ausgabe

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

27

24.01.2018, 15:30

Ihr habt beide Recht...
In "ServerFunktion" wird setTimeout(ServerFunktion) verwendet (Zeile 55). Also ServerFunktion registriert sich immer wieder selbst wenn sie aufgerufen wird.

28

24.01.2018, 15:32

Das kann doch aber nicht sein, ich benutze doch "setTimeout" und sehe doch das man damit ein regelmaessiges Aufrufen erzeugt, die Funktion welche ich an "setTimeout" uebergebe wird immer wieder neu aufgerufen, nach Ablauf der eingestellten Zeit, deswegen ist es hier etwas schwer zu verstehen, weil "setInterval" scheint das gleiche zu tun, aber irgendwo scheint es auch ein Unterschied zu geben.

Nein, das ist definitiv nicht so.

Drück mal F12 und gib in der Konsole ein:

Quellcode

1
i = 0; setTimeout(function() { console.log("Aufruf Nr. " + (++i)); }, 1000);

--> nur eine einzige Ausgabe nach einer Sekunde

Und dann probier zum Vergleich:

Quellcode

1
i = 0; setInterval(function() { console.log("Aufruf Nr. " + (++i)); }, 1000);

--> jede Sekunde eine neue Ausgabe



Aber schau mal folgendes erzeugt auch ein regelmaessiges Aufrufen mit "setTimeout":

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
var Zaehler=0;
function Test()
{
 Zaehler++;
}
function ServerFunktion()
{
     Test();
     console.log("Zaehler "+Zaehler);

     //---- 1000 = 1 sekunde
     setTimeout(ServerFunktion, 2000);
}


Wenn du das ausfuehrst im browser wirst du auch sehen das immer weiter hoch gezzaehlt wird, deswegen sage ich ja ich weis nicht genau welche von beiden ist die bessere Wahl, es scheint ja irgendwo ein Unterschied zu geben und so wie ich das gelesen und verstanden habe scheint eine von beiden ein Wiederholen zu erzwingen und die andere wartet ab.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

29

24.01.2018, 15:41

Das erzeugt ein regelmäßiges Aufrufen, weil du explizit dafür sorgst. setTimeout von sich aus tut das nicht.
Wenn du es so machst wie in deinem Beispiel, hast du den Vorteil, dass du das regelmäßige Aufrufen einfacher abbrechen kannst, wenn du es nicht mehr brauchst, indem du einfach nicht mehr setTimeout aufrufst. Bei setInterval müsstest du dir den Rückgabewert merken und clearInterval aufrufen, um es zu stoppen.

30

24.01.2018, 15:44

Ich habe gerade in Google bisjen gesucht und eine Info auf Deutsch gefunden: https://www.mediaevent.de/javascript/animation.html

Ich habe dort genau das gelesen was ich so aehnlich in einem anderen englischen Artikel verstanden habe, die "setTimeout" Funktion ist mehr asynchron und "setInterval" mehr synchron.

Ich denke deswegen das ich bei "setTimeout" bleibe, es sei den jemand weis irgendein Vorteil von "setInterval", aber so wie es aussieht scheint "setTimeout" eher den Vorteil zu haben asynchron zu sein.

Werbeanzeige