1. Vier Konzepte 1. JavaScript ist Single-Threaded Single-Threaded bedeutet, dass unser 2. AufgabenwarteschlangeUm das oben erwähnte Warteschlangenproblem zu lösen, wird eine Aufgabenwarteschlange erstellt. Wenn der Browser eine asynchrone Aufgabe mit einem Ergebnis hat, wird diese zur späteren Ausführung der Aufgabenwarteschlange hinzugefügt, und andere Aufgaben werden synchron im Hauptthread ausgeführt. Hierbei ist zu beachten, dass das Hinzufügen von Aufgaben zur Aufgabenwarteschlange erfolgt, nachdem die asynchrone Aufgabe ein Ergebnis aufweist. Tatsächlich existiert in der Aufgabenwarteschlange die Rückruffunktion der asynchronen Aufgabe. 3. Synchrone Aufgaben und asynchrone AufgabenSynchrone Aufgaben in Js-Programmen beziehen sich auf Aufgaben, die im Hauptthread ausgeführt werden, und asynchrone Aufgaben beziehen sich auf Aufgaben, die in die Aufgabenwarteschlange gelangen. 4. Javascript-AusführungsstapelAlle synchronen Aufgaben werden auf dem Hauptthread ausgeführt und bilden einen Ausführungsstapel. Wenn die Aufgabe im Hauptthread abgeschlossen ist, wird sie zur Ausführung aus der Aufgabenwarteschlange genommen. var name = "zhouwei"; setzeTimeout(() => { konsole.log(1); }, 1000); konsole.log(Name); Der obige Code wird im Browser wie folgt ausgeführt. Unter dem Code der globalen Ausführungsumgebung des Programms verstehen wir den in einer Hauptfunktion verpackten Code. Der Ausführungsstapel dieses Codes ändert sich wie in der folgenden Abbildung dargestellt:
Ereignisschleife Der Prozess, bei dem der Js-Ausführungsstapel kontinuierlich Aufgaben aus der Aufgabenwarteschlange liest und ausführt, wird als Wir wissen, dass die Aufgabenwarteschlange die Ergebnisse asynchroner Aufgaben speichert. Was sind also asynchrone Aufgaben?
Es gibt viele Ereignisse in
Die asynchronen Task-Rückrufe, die in die Task-Warteschlange gelangen, werden in Makrotasks und Mikrotasks unterteilt. Die Regeln für den Js-Ausführungsstapel zum Ausführen von Makrotasks und Mikrotasks sind in der folgenden Abbildung dargestellt. Der Js-Ausführungsstapel führt zuerst eine Makroaufgabe aus (globaler Code) -> liest alle Mikroaufgaben aus der Aufgabenwarteschlange -> UI-Rendering (Browser-Rendering-Schnittstelle) -> liest eine Makroaufgabe aus der Aufgabenwarteschlange -> alle Mikroaufgaben -> UI-Rendering -> …
Was sind Makroaufgaben?
Was sind Mikroaufgaben?
Problem mit der setTimeout-Verzögerung Im Allgemeinen ist die Ausführungszeit des Rückrufs in 3. Tatsächlicher KampfÜben Sie die folgende Codeausgabe: konsole.log(1); setzeTimeout(() => { konsole.log(2); Versprechen.auflösen().dann(() => { console.log(3) }); }); neues Versprechen(lösen => { konsole.log(4); setzeTimeout(() => { konsole.log(5); }); Entschlossenheit(6) }).dann(Daten => { konsole.log(Daten); }) setzeTimeout(() => { konsole.log(7); }) konsole.log(8); Verwenden Sie den oben erwähnten JS-Ausführungsmechanismus, um diese Frage zu analysieren: 1: Führen Sie die synchrone Codeausgabe in der globalen Aufgabe aus:
Hierbei ist zu beachten, dass es sich bei der von 2: Zu diesem Zeitpunkt befinden sich drei // Die Makroaufgabe zu diesem Zeitpunkt ist setTimeout(() => { konsole.log(2); Versprechen.auflösen().dann(() => { console.log(3) }); }); setzeTimeout(() => { konsole.log(5); }); setzeTimeout(() => { konsole.log(7); }) // Zu diesem Zeitpunkt ist die Mikrotask dann (Daten => { konsole.log(Daten); })
3: Führen Sie dann die erste Makroaufgabe aus setzeTimeout(() => { konsole.log(2); Versprechen.auflösen().dann(() => { console.log(3) }); });
In dieser Makrotask wird der Aufgabenwarteschlange eine Mikrotask hinzugefügt. An diesem Punkt enthält die Aufgabenwarteschlange eine neue Mikroaufgabe. 4: Führe eine Mikroaufgabe aus, Ausgabe: 3 dann(() => { console.log(3) }); 5: Führen Sie die Aufgabe weiterhin gemäß den Regeln aus. Ausgabe: 5, 7 Die Gesamtausgabe ist:
Ist das Ihre Antwort? Zusammenfassen:
Dies ist das Ende dieses Artikels über den Ereignisschleifenmechanismus des Das könnte Sie auch interessieren:
|
<<: So implementieren Sie eine Paging-Abfrage in MySQL
>>: Mehrere CSS3-Tag-Abkürzungen (empfohlen)
Durch JavaScript können wir das Springen von Hype...
Wenn Sie die Größe und Anzahl der InnoDB-Redo-Log...
Inhaltsverzeichnis 1. Einführung in das Verbindun...
Gespeicherte MySQL-Prozedur 1. Erstellen Sie die ...
Problembeschreibung MySQL meldet beim Start einen...
In dieser Anmerkung beschreiben wir kurz Was ist ...
Das Formular bietet zwei Möglichkeiten zur Datenüb...
In diesem Blog führe ich Sie in einfachen Schritt...
Wenn bei der tatsächlichen Projektentwicklung die...
Das Standard-Remote-Repository von Nexus ist http...
1. Linux-Netzwerkkonfiguration Bevor Sie das Netz...
Heute habe ich eine Fallstudie zur MySQL IN-Unter...
Inhaltsverzeichnis 1. Was ist ein Prototyp? 1.1 F...
Inhaltsverzeichnis Vorwort 1. Vorbereitung 2. Tat...
Informationen zum Deinstallieren der zuvor instal...