2016-06-20 8 views
0

den folgenden Code Stellen Sie sich vor, auf dem Knoten ausgeführt wird und mit lodash:Können Aufrufe in einer Schleife nach einem Funktionsaufruf nach der Schleifenerklärung ausgeführt werden?

var result = []; 

_.each(someArray, function (elem) { ... result.push(newElem); }); 
_.each(anotherArray, function (elem) { ... result.push(newElem); }); 

superfunction(result); 

Ist es möglich, in einem gewissen Umstand, dass superfunction Läufe vor denen jeder() finish, was bedeutet, dass superfunction eine halbe result Array gefüllt bekommen würde ?

+0

Ja, absolut. Das result.push() könnte sich im Callback einer asynchronen Methode befinden. In diesem Fall würde Superfunction ausgeführt werden, bevor einer der .push() - Aufrufe ausgeführt wird. –

+0

Ok, aber im Fall von völlig synchronem Code auf die Funktionen, die von jedem aufgerufen werden - nur einige mathematische Berechnungen, zum Beispiel - könnte die Superfunktion aufgerufen werden, bevor die Schleifen enden? – Andre

+2

Nein. Wenn es synchron ist, dann verlässt es nie den aktuellen Callstack und daher kann die Superfunktion erst dann ausgeführt werden, wenn alle abgeschlossen sind. –

Antwort

0

Nicht, es sei denn, die Anweisung, die result mutiert, wird asynchron ausgeführt, z. B. als Ergebnis eines REST-Aufrufs.

Ansonsten sind diese lodash-Funktionen vollständig synchron.