Kann so etws überhaupt sein?
Nein. So allgemein ist das nicht möglich. Dein abstraktes Beispiel wird immer nacheinander ausgeführt. Das Problem liegt höchstwahrscheinlich in dem Code, den du durch »...« ersetzt hast.
Wenn du Funktionen synchron und nacheinander startest, werden sie auch in genau der Reihenfolge ausgeführt. Ich vermute allerdings, dass irgendwo eine Asynchronität hineinkommt, wodurch die Ausführung von Code erst nach der Abarbeitung des aktuellen Threads erfolgt. Das kann durch ein setTimeout irgendwo geschehen, durch Ajax (XMLHttpRequest), durch das Laden eines Scriptes usw.
Wenn du also »Daten über eine API von einem anderem Server abrufst«, wird mit Sicherheit irgendwo asynchron, d.h. Event- und Callback-basiert gearbeitet. XMLHttpRequest arbeitet standardmäßig asynchron und ruft Handlerfunktionen auf. Erst wenn die gefeuert werden und der Request den Status »fertig« hat, kannst du auf die Serverrückgabe zugreifen und damit weiterarbeiten.
Du kannst also nicht notieren:
starteRequest(); func1(); starteRequest() func2(); starteRequest(); func3();
(Zumindest nicht mit asynchronem XMLHttpRequest, höchstens mit synchronem, das kann man Einstellen beim Erzeugen eines Requests. Allerdings friert der gesamte Browser für die Zeit eines synchronen Requests ein, das ist auch keine gute Idee, wenn man mehrere Requests nacheinander senden will.)
Vielmehr müsste man mit Handlerfunktionen arbeiten. Schematisch:
starteRequest(handler1);
function handler1 () {
starteReqest(handler2);
}
function handler2 () {
starteRequest(handler3);
}
function handler3 () {
usw.
}
Das sieht jetzt kompliziert aus, aber sinnvollerweise kann man z.B. eine Funktion schreiben, die als Handler für alle fungiert und die dann den jeweils folgenden Schritt ausführt.
Das ist alles sehr allgemein gehalten; du solltest uns näheres darüber erzählen, was dein Code im Detail macht.
Mathias