Einführung
In diesem Projekt lernst du, wie du eine RequestControl-Klasse entwickelst, die Startanforderungen für Raumschiffe sammelt und den Start der nächsten Raumschiffsreihe automatisch basierend auf den Ergebnissen der Raumschiffe organisiert. Dies wird helfen, dass die Menschen den Einfluss der „Dual Vector Foil“ des Dreikörperproblems überwinden, das den dreidimensionalen Raum in eine zweidimensionale Ebene zusammenzieht.
👀 Vorschau

🎯 Aufgaben
In diesem Projekt wirst du lernen:
- Wie du die
run-Funktion in derRequestControl-Klasse implementierst, um den Start der Raumschiffe zu verarbeiten. - Wie du die Startergebnisse auf der Seite mit der
render-Funktion darstellst.
🏆 Errungenschaften
Nach Abschluss dieses Projekts wirst du in der Lage sein:
- Promises verwenden, um den Raumschiffstartprozess zu simulieren.
- Die Startwarteschlange zu verwalten und die Anzahl der Raumschiffe zu steuern, die gleichzeitig gestartet werden können.
- Die Benutzeroberfläche zu aktualisieren, um die Startergebnisse anzuzeigen.
Projektstruktur einrichten
In diesem Schritt wirst du die Projekt-Dateien und -struktur einrichten. Folge den Schritten unten, um diesen Schritt abzuschließen:
Öffne das Projektverzeichnis. Die Verzeichnisstruktur ist wie folgt:
├── index.html
└── main.js
Darin:
index.htmlist die Hauptseite.main.jsist die js-Datei, in der der Code ergänzt werden muss.
In der Datei main.js:
- Die
createRequest-Methode ist einPromisefür einen Raumschiffstartanfrage. - Die
addRequest-Methode derRequestControl-Klasse sammelt Startanfragen für Raumschiffe. Die Raumschiffstartanfrage wird in die Startwarteschlangethis.requestQueuegelegt. - Die
run-Methode ordnet automatisch den Start der nächsten Raumschiffsreihe basierend auf den Start-Ergebnissen an. - Die
render-Methode wird verwendet, um die Start-Ergebnisse auf der Seite darzustellen.
Nehmen wir max = 2 als Beispiel. Der Raumschiffstartprozess ist wie folgt:

Klicke auf die Schaltfläche Go Live in der unteren rechten Ecke von WebIDE, um das Projekt auszuführen. Es hat zunächst keine Wirkung.
Implementiere die run-Funktion in der RequestControl-Klasse
In diesem Schritt wirst du die run-Funktion in der RequestControl-Klasse implementieren, um den Start der nächsten Raumschiffsreihe automatisch basierend auf den Start-Ergebnissen zu organisieren.
- Öffne die Datei
main.jsim bereitgestellten Projekt. - Locate die
run-Funktion in derRequestControl-Klasse. - Füge im Inneren der
run-Funktion folgenden Code hinzu, um den Start der Raumschiffe zu verarbeiten:
run() {
// Ermittle die Länge der Anforderungswarteschlange
let len = this.requestQueue.length;
// Wenn die Anforderungswarteschlange leer ist, breche ab
if (len === 0) return;
// Ermittle das Minimum der maximalen Anzahl von Raumschiffen und der Länge der Anforderungswarteschlange
let min = Math.min(this.max, len);
// Starte die Raumschiffe nacheinander
for (let i = 0; i < min; i++) {
// Verringere die maximale Anzahl von Raumschiffen, die gestartet werden können
this.max--;
// Hole die nächste Anforderung aus der Warteschlange
let req = this.requestQueue.shift();
// Starte das Raumschiff und verarbeite das Ergebnis
req()
.then((res) => {
this.render(res);
})
.catch((error) => {
this.render(error);
})
.finally(() => {
// Erhöhe die maximale Anzahl von Raumschiffen, die gestartet werden können
this.max++;
// Rufe die run-Funktion rekursiv auf, um die nächste Raumschiffsreihe zu starten
this.run();
});
}
}
Die Schwerpunkte der Implementierung sind:
- Ermittle die Länge der Anforderungswarteschlange (
this.requestQueue.length). - Wenn die Anforderungswarteschlange leer ist, breche ab.
- Ermittle das Minimum der maximalen Anzahl von Raumschiffen und der Länge der Anforderungswarteschlange (
Math.min(this.max, len)). - Starte die Raumschiffe nacheinander und verringere dabei die maximale Anzahl von Raumschiffen, die gestartet werden können (
this.max--). - Verarbeite das Ergebnis des Raumschiffstarts mit den
then- undcatch-Methoden des Promises, das vonreq()zurückgegeben wird. - Erhöhe die maximale Anzahl von Raumschiffen, die gestartet werden können (
this.max++) und rufe dierun-Funktion rekursiv auf, um die nächste Raumschiffsreihe zu starten.
Teste das Projekt
- Speichere die Datei
main.js. - Aktualisiere die Webseite in deinem Browser.
- Beobachte die auf der Seite angezeigten Start-Ergebnisse. Die Seite sollte die erfolgreichen und fehlgeschlagenen Raumschiffstarts anzeigen.
Das finale Seiteneffekt ist wie folgt:

Herzlichen Glückwunsch! Du hast die Implementierung der RequestControl-Klasse abgeschlossen, um den Raumschiffstart automatisch zu organisieren. Das Projekt sollte jetzt voll funktionsfähig sein.
Zusammenfassung
Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Labore absolvieren, um deine Fähigkeiten zu verbessern.



