JavaScript hat einen einzigen Thread der Ausführung.
JavaScript verhindert nicht den laufenden Thread.
Nichts anderes in Ihrem Programmcode kann ausgeführt werden, bis der Aufrufstapel geleert wurde. Dies wird "bis zur Fertigstellung" genannt.
Daher blockiert alles, was in Ihrem Programm läuft, alles andere (buchstäblich ALLES).
Also, wenn Sie etwas haben, das durch etwas anderes als CPU (wie eine Netzwerkanforderung oder Warten auf den Benutzer) gebunden ist, dann ist es sehr verschwenderisch in Bezug auf CPU, weil der Thread der Ausführung durch einfaches Warten blockiert ist etwas passieren. Die CPU befindet sich also im Leerlauf.
Die JavaScript-Laufzeit bietet daher Mechanismen zur Vermeidung dieses Szenarios. Es macht Funktionalität, die durch Warten gekennzeichnet ist (wie Netzwerkanforderungen) asynchron.
Dies bedeutet, dass der JavaScript-Thread der Ausführung fortgesetzt werden kann, während die Laufzeit auf Sie wartet.
Sie können diesen asynchronen Funktionen einen Rückruf zuweisen, um die Fortsetzung anzugeben. h. wo der Kontrollfluss abholen sollte, wenn der asynchrone Vorgang abgeschlossen ist.
Wenn der asynchrone Vorgang abgeschlossen ist, fügt die Laufzeitumgebung einen "Job" in eine "Job Queue" ein, die für die Laufzeit intern ist.
Diese Jobs kapseln den Funktionszeiger (Callback) und die Argumente, die beim Aufruf des Callbacks verwendet werden sollen.
Wenn der Aufrufstapel als nächstes leer ist und wenn andere Aufträge in der Warteschlange abgeschlossen wurden, wird der Auftrag aus der Auftragswarteschlange entfernt und ein Stapelrahmen wird instanziiert ("Ausführungskontext") und auf den Stapel gelegt.
Die Laufzeit beginnt dann mit der Ausführung von diesem Stapelrahmen.
Manchmal ist diese Art von Verhalten in eine Versprechen API verpackt, um es noch bequemer zu machen, aber die Mechanik ist die gleiche.
setTimeout(callback, 2000);
document.write('Cool, I can do some stuff while the setTimeout is waiting.');
function callback() {
document.write('Hello from the callback.');
}
Asynchrone Operationen. Ein einfaches Beispiel für die Verwendung eines Callbacks finden Sie unter [setTimeout] (https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout). –
Sie sollten die Frage formulieren: "Was sind die Vorteile von' Promise's? " – ftor