2016-09-29 8 views
0

Also habe ich einige Nachforschungen darüber angestellt, wie JavaScript tatsächlich single-threaded ist, obwohl es Multithread zu sein scheint (oder wenigstens so verstehe ich es), und ich frage mich, ob die folgende Funktion vor einigen abgeschlossen werden könnte andere Funktion wird aufgerufen.Sind JavaScript-Listenoperationen synchron?

Ich bin ziemlich sicher, dass es ist, aber der Anruf zu push() macht mich sorgen, dass, wenn es aufgerufen wird, einige andere Funktion zuerst ausgeführt werden kann. Davon abgesehen kann ich mir keinen lang laufenden Code vorstellen, der in push() laufen würde.

// adds a new node to children, after checking if its UID is not in childrenAdded 
this.addChild = function(newChild) { 
    if (!_this._childrenAdded[newChild.uid]) { 
     _this._childrenAdded[newChild.uid] = true;    
     _this._children.push(newChild); 
    } 
} 
+0

Wir haben keine Ahnung, was '_dies' ist oder wie' this.addChild' aufgerufen wird, aber der Rest des Codes, der auf Member mit Klammern zugreift und zu einem Array pusht, ist sicherlich ** synchron **. Im Grunde genommen sind nur Timer, Ajax und andere Anfragen in den Clients asynchron. JS – adeneo

+0

Es gibt nichts, das mit diesem Code asynchron ist. – epascarello

Antwort

1

Alle Array Methoden, einschließlich push, sind synchron. Das ist so ziemlich der Standard für alle Operationen in JS, asynchron ist die Ausnahme und in jeder dieser Funktionen dokumentiert.

1

Wenn eine Funktion asynchron ist, nimmt sie normalerweise eine Callback-Funktion als Parameter oder gibt eine Promise oder etwas Ähnliches zurück.

Auf diese Weise können Sie immer sicherstellen, dass Ihr Code ausgeführt wird, nachdem die Funktion beendet wurde, wenn Sie das möchten.

So, um Ihre Frage zu beantworten: Push ist synchron! :)

+0

"Wenn eine Funktion asynchron ist, wird sie normalerweise eine Callback-Funktion als Parameter annehmen" - Dies ist kein guter Indikator. Zum Beispiel nehmen 'Array.prototype.sort' und' Array.prototype.forEach' beide Funktionen als Argumente an, sind jedoch synchron. – Quentin

+0

Ja, aber wenn Sie sich irgendeine Art von Dokumentation anschauen oder einfach nur herausfinden, wie diese Funktionen funktionieren (was Sie tun müssen, um sie zu verwenden), werden Sie wissen, dass diese Funktionsparameter keine Callbacks sind und einen ganz anderen Zweck haben. Ich habe nicht gesagt "wann immer eine Funktion als Parameter geparst wird, ist es eine Callback-Funktion";) – jdepoix

0

Die Array-Push-Methode ist synchron. Ich empfehle sehr zu beobachten, this video on the javascript event loop zu verstehen, was hinter den Kulissen passiert.

Wenn Sie es oft genug sehen, sollte es klären, wie der "single threaded, obwohl es scheint, Multithread" Teil von Javascript funktioniert. Oder vielleicht könnte es dich mehr verwirren, aber hey das ist Javascript für dich!

1

Alles in Javascript ist synchron. Es könnte sich verhalten und asynchron aussehen, aber das liegt daran, dass alles in Javascript in einen Ausführungsstapel gelegt wird. Sobald etwas fertig ist, ist es vom Stapel gefallen.

Wenn Sie ein Ereignis haben, wird es in eine Ereignisschleife verschoben. Sobald alles aus dem Ausführungsstapel herausgesprungen ist, durchsucht es die Ereignisschleife, um zu sehen, ob etwas ausgeführt werden kann. Wenn dies der Fall ist, wird das Ereignis ausgeführt. Es könnte asynchron aussehen, aber es ist wirklich nicht.

Also, zum Schluss. Javascript ist synchron.