Der Code wird immer in der Reihenfolge ausgeführt, in der er verarbeitet wird.
jedoch, wenn func1
intern ist einen asynchronen Vorgang durchgeführt wird, dann das wird etwas außerhalb des Codes aufzurufen, die nicht sofort zurück. func1
selbst wird abgeschlossen, aber die Operation möglicherweise nicht.
In diesem Fall sollte func1
als Funktionsparameter einen Rückruf verfügbar machen. Welche intern func1
strukturell wäre, intuitiv ähnlich wie diese:
function func1(callback) {
// do some stuff
callback();
}
nun in do some stuff
würde es asynchrone Operationen sein, die den gleichen Nachteil haben, so würde func1
haben die Verantwortung, die entlang der callback
in geeigneter Weise in diese Operationen nach Bedarf. Die Struktur hängt davon ab, was diese Operationen wirklich sind.
Aber der Punkt ist, dass jede Funktion, die eine asynchrone Operation ausführt, einen Rückruf offen legen sollte nach Abschluss dieser Operation aufgerufen werden. Dann würden Sie es als verwenden:
func1(func2);
ist jedoch zu beachten, dass Sie in laufen ein anderes Problem hier. Da func1
asynchron ist, gilt dies auch für outFunc
. Was bedeutet, das wird nicht funktionieren:
return val;
outFunc
vor dem asynchronen Vorgang abgeschlossen wird (n) abgeschlossen. Also wird nichts von Wert zurückgegeben werden. Es gibt einige sehr gute eingehende Erklärungen zu this highly-linked question. Aber im Wesentlichen müssen Sie darüber nachdenken, wie Sie Ihren Code strukturieren. Und das konstruierte Beispiel in der Frage eignet sich nicht wirklich dazu.
Anstatt Werte zurückgeben, müssen Sie bieten Rückrufe. Der Code, der normalerweise den zurückgegebenen Wert zum Ausführen einer Operation verwenden würde, würde stattdessen in den Rückruf versetzt und diese Operation zu einem späteren Zeitpunkt ausführen, wenn der Wert verfügbar wird.
hat func1 einen asynchronen Betrieb? – gurvinder372
Wenn Sie keine asynchronen Aufrufe in 'func1' haben, funktioniert das standardmäßig so, wie Sie es möchten. –
ja, func1 hat einen asynchronen Betrieb. –