Javascript und Syncronität...

GELight

Mitglied
Mal ne allgemeine und eine spezifische Frage .

Soweit ich Javascript verstanden habe, läuft es alles in allem erstmal assyncron ab... richtig?
Wenn ja... wie bekommt Ihr das in den Griff immer sicherzustellen, dass er alles schön der Reihe nach abarbeitet ?

Als Beispielcode mal hier:
PHP:
1. Codezeile ausführen
2. Codezeile ausführen
3. Funktion ausführen (komplex mit weiteren Funktionen, die genutzt werden)
4. Codezeile ausführen
5. Codezeile ausführen

Das Problem ist ja, dass er Zeile 3 ja noch nicht zwingend abgearbeitet haben muss, wenn er Zeile 4 abarbeiten will... rightig?
Ich suche hier nach einer allgemeingültigen guten Lösung, weil mein kleines Framework was ich mir schreibe mittlerweile doch nicht mehr sooo klein ist und nun bemerke ich, dass genau dieses syncrone abarbeiten langsam zum Problem werden kann.

Gruß Mario
 
Dein Beispiel ist trivial, weil es das Problem gar nicht zeigt:

Javascript:
f1();
f2();
f3(function() {
    f4();
    f5();
});

Viel spannender wird es jetzt:

Javascript:
f1(function() {
    f2(function() {
        f3(function() {
            f4(function() {
                f5();
            });
        });
    });
});

Das kann man dann mit einem Framework (https://github.com/caolan/async) schöner lösen:

Javascript:
async.serial([f1, f2, f3, f4], function() {
    f5();
});


Edit: Deine Grundaussage ist allerdings falsch. Nur weil 3. ein paar weitere Funktionen ausführt, heißt das nicht, dass 4. vorher ausgeführt wird. Das passiert schon alles hintereinander.
 
Zuletzt bearbeitet:
Sorry, das verwechsel ich doch jedesmal.
Ich meinte auch asyncron ... :)
Natürlich arbeitet er alles brav der Reihe nach ab.
Was ich mit meinem Beispiel meinte ist, dass er zwar erst Zeile 3 und danach Zeile 4 ausführt, er aber nicht zwingend mit Zeile 3 fertig sein muss.

Extra ein weiteres Framewok nutzen, wollte ich vermeiden.
 
Ach sooo... ich glaub jetzt bekomm ich etwas Verständnis dafür, was du meinst.
Javascript selbst läuft schon irgendwo syncron ab.... also 1..2..3..4..5..
Und wenn ich es richtig deute, dann gibt es bestimmte Funktionen (vermutlich nur die, die mit DOM Manipulation in Verbindung stehen etc...), die syncron abgearbeitet werden und somit nicht darauf gewartet wird, wie lange diese zur Abarbeitung dauern... richtig?

Die Frage ist, wie ich diese Hürde ohne auch evtl. ohne Frameworks elegant lösen könnte. :)
 
Okay... mal ein konkretes Codebeispiel in meinem System, wo ich das Problem erkannt habe.
PHP:
// ...
self.config.resizer[i] = jsCow.components.get(jsCow.res.components.resizer);
self.config.resizer[i] = self.getCmp().appendAfterInner(self.config.resizer[i], c);
								
if (cfg.direction == "horizontal") {
	self.config.resizer[i].setHorizontalOrientation();
}else{
	self.config.resizer[i].setVerticalOrientation();
}
// ...

Diese Codezeilen werden innerhalb einer Component von mir innerhalb einer Methode ausgeführt. In Zeile 2 des Beispiels möchte ich über die Methode .appendAfterInner() eine neue Componente meines Systems in den Daten-Baum einhängen. Hier wird dann auch die jQuery.after(); Methode verwendet um etwas in den DOM einzuhängen. Dies dauert dementsprechend auch mal etwas länger. Und somit kommt es zum Problem, weil er in der IF Anweisung dann wieder auf einen Wert versucht zuzugreifen, der in der Methode zuvor erst gesetzt wird.

Ich hoffe es ist verständlich.
Ich kann nicht alle Methoden zeigen, da es einfach zu viel wäre aber diese Zeilen hier werden derzeit exakt auch so abgearbeitet.

Gruß Mario
 

Neue Beiträge

Zurück