Heim Web-Frontend js-Tutorial 6 Merkmale der asynchronen JavaScript-Programmierung Versprechen mode_javascript-Fähigkeiten

6 Merkmale der asynchronen JavaScript-Programmierung Versprechen mode_javascript-Fähigkeiten

May 16, 2016 pm 04:53 PM
javascript promise 异步编程

Bevor wir mit der formellen Einführung beginnen, möchten wir sehen, wie Javascript Promise aussieht:

Kopieren Sie den Code Der Code ist wie folgt:

var p = new Promise(function(resolve, ablehn) {
discover("hello world");
});

p. then(function(str ) {
alarm(str);
});

1 Was ist der Unterschied zwischen den folgenden beiden Codeteilen?

Code kopieren Der Code lautet wie folgt:
// Anlage A
var p = neues Versprechen (/*...*/);
p.then(func1);
p.then(func2);

// Anlage B
var p = neu Promise(/ *...*/);
p.then(func1)
.then(func2);
Wenn Sie die beiden oben genannten Codeteile ernst nehmen, dann ist Promises genau das Richtige ein eindimensionales Array von Rückruffunktionen. Dies ist jedoch nicht der Fall. Jeder then()-Aufruf gibt ein gespaltenes Versprechen zurück. Wenn daher in Anlage A func1() eine Ausnahme auslöst, wird func2() immer noch normal aufgerufen.
Wenn func1() in ExhibitB einen Fehler auslöst, wird fun2() nicht aufgerufen, da der erste Aufruf ein neues Versprechen zurückgibt, das in func1() abgelehnt wird. Das Ergebnis ist, dass func2() übersprungen wird.

Zusammenfassung: Versprechen können in mehrere Pfade aufgeteilt werden, ähnlich wie bei komplexen Flussdiagrammen.

2. Rückruf sollte das Ergebnis liefern

Welche Warnung erhalten Sie, wenn Sie den folgenden Code ausführen?


Code kopieren Der Code lautet wie folgt:
var p = new Promise(function(resolve , ablehnen) {
discover("hello world");
});

p.then(function(str) {})
.then(function(str) {
warning (str);
});
Der Alert im zweiten then() zeigt nichts an. Dies liegt daran, dass die Callback-Funktion im Kontext des Versprechens keine Callback-Funktion hat, da sich das Ergebnis ändert. Das Versprechen erwartet, dass Ihre Rückruffunktion dasselbe Ergebnis oder ein Ersatzergebnis zurückgibt, das dann an die nächste Rückruffunktion übergeben wird.
Verwenden Sie auf ähnliche Weise adpater, um die Ergebnisse wie folgt zu ändern:


Kopieren Sie den Code Der Code lautet wie folgt:
var FeetToMetres = function(ft) { return ft*12*0.0254 };

var p = new Promise(/*...*/);

p .then(feetToMetres)
.then(function(meters) {
warning(meters);
});
3. Es können nur Ausnahmen aus der oberen Ebene abgefangen werden
Was ist der Unterschied zwischen diesen beiden Codeteilen?


Code kopieren Der Code lautet wie folgt:
// Anlage A
neues Versprechen (Funktion( auflösen, ablehnen) {
auflösen("hello world");
})
.then(
function(str) {
throw new Error("uh oh") ;
},
undefiniert
)
.then(
undefiniert,
function(error) {
warning(error);
}
);

// Anlage B

neues Versprechen(funktion(auflösen, ablehnen) {
auflösen("Hallo Welt");
})
.then(
Funktion(str) {
throw new Error("uh oh");
},
function(error) {
warning(error);
}
);

in Im ersten Teil des Codes wird die im ersten then() ausgelöste Ausnahme vom zweiten then() abgefangen und dann die „uh oh“-Warnung ausgelöst. Daraus folgt, dass nur Ausnahmen der vorherigen Ebene abgefangen werden.
Im zweiten Teil des Codes befinden sich die Rückruffunktion und die Fehlerrückruffunktion auf derselben Ebene, was bedeutet, dass eine im Rückruf ausgelöste Ausnahme nicht abgefangen wird. Tatsächlich wird der Fehlerrückruf im zweiten Code nur ausgelöst, wenn das Versprechen abgelehnt wird oder das Versprechen selbst fehlschlägt

4. Fehler können behoben werden

Wenn Sie in einer Fehlerrückruffunktion den Fehler nicht erneut auslösen, geht das Versprechen davon aus, dass Sie den Fehler behoben haben, und kehrt zum gelösten Zustand zurück. Im nächsten Beispiel wird „ich bin gerettet“ angezeigt, da der Fehlerrückruf im ersten then() die Ausnahme nicht erneut ausgelöst hat.


Code kopieren Der Code lautet wie folgt:

var p = new Promise(function(resolve, ablehn) {
reject(new Error("pebkac"));
});

p.then(
undefiniert,
function(error) { }
)
.then(
function(str) {
warning("Ich bin gerettet!");
},
function(error) {
warning("Bad computer!");
}
);

Promise kann man sich wie Schichten auf einer Zwiebel vorstellen. Jedes then() fügt der Zwiebel eine weitere Schicht hinzu. Jede Ebene stellt eine Aktivität dar, die verarbeitet wird. Wenn eine Schicht endet, gilt das Ergebnis als repariert und bereit für die nächste Schicht.

5. Versprechen können pausiert werden

Nur ​​weil Sie bereit sind, eine then()-Methode auszuführen, heißt das nicht, dass Sie nicht pausieren und andere vorzeitig ausführen können. Um das aktuelle Versprechen anzuhalten oder auf den Abschluss eines anderen Versprechens warten zu lassen, geben Sie einfach ein weiteres Versprechen in then() zurück.

Code kopieren Der Code lautet wie folgt:

var p = new Promise(/*. ..* /);

p.then(function(str) {
if(!loggedIn) {
return new Promise(/*...*/);
}
})
.then(function(str) {
warning("Done.");
})

Im vorherigen Code wird die Eingabeaufforderung erst angezeigt Neues Versprechen ist gelöst. Dies ist eine praktische Möglichkeit, mehr Abhängigkeiten in einen vorhandenen asynchronen Codepfad einzuführen. Beispielsweise stellen Sie möglicherweise fest, dass die Sitzung des Benutzers abgelaufen ist, und Sie möchten möglicherweise eine zweite Anmeldung initialisieren, bevor Sie mit dem vorherigen Codepfad fortfahren.

6. Aufgelöste Versprechen werden nicht sofort ausgeführt

Erhalte ich eine Eingabeaufforderung, wenn ich den folgenden Code ausführe?

Code kopieren Der Code lautet wie folgt:

function runme() {
var i = 0 ;

new Promise(function(resolve) {
discover();
})
.then(function() {
i = 2;
});
warning(i);
}

Da das Promise sofort aufgelöst wird und die then()-Methode sofort ausgeführt wird, könnte man meinen, dass Prompt 2 erkannt wird. Die Versprechensdefinition erfordert jedoch, dass alle Aufrufe asynchron erzwungen werden. Daher wird die Eingabeaufforderung vor der Änderung generiert.
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie implementiert man asynchrone Programmierung mit C++-Funktionen? Wie implementiert man asynchrone Programmierung mit C++-Funktionen? Apr 27, 2024 pm 09:09 PM

Zusammenfassung: Asynchrone Programmierung in C++ ermöglicht Multitasking, ohne auf zeitaufwändige Vorgänge warten zu müssen. Verwenden Sie Funktionszeiger, um Zeiger auf Funktionen zu erstellen. Die Rückruffunktion wird aufgerufen, wenn der asynchrone Vorgang abgeschlossen ist. Bibliotheken wie boost::asio bieten asynchrone Programmierunterstützung. Der Praxisfall zeigt, wie man mit Funktionszeigern und boost::asio asynchrone Netzwerkanfragen umsetzt.

Halten Sie Ihr Wort: Die Vor- und Nachteile der Einhaltung Ihrer Versprechen Halten Sie Ihr Wort: Die Vor- und Nachteile der Einhaltung Ihrer Versprechen Feb 18, 2024 pm 08:06 PM

Im täglichen Leben stoßen wir oft auf Probleme zwischen Versprechen und Erfüllung. Ob in einer persönlichen Beziehung oder einer Geschäftstransaktion: Das Einhalten von Versprechen ist der Schlüssel zum Aufbau von Vertrauen. Allerdings sind die Vor- und Nachteile eines Engagements oft umstritten. In diesem Artikel werden die Vor- und Nachteile von Verpflichtungen untersucht und einige Ratschläge gegeben, wie Sie Ihr Wort halten können. Die versprochenen Vorteile liegen auf der Hand. Erstens schafft Engagement Vertrauen. Wenn jemand sein Wort hält, lässt er andere glauben, dass er eine vertrauenswürdige Person ist. Vertrauen ist die Bindung zwischen Menschen, die Menschen mehr machen kann

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Erfahren Sie mehr über Promise.resolve() Erfahren Sie mehr über Promise.resolve() Feb 18, 2024 pm 07:13 PM

Eine detaillierte Erklärung von Promise.resolve() erfordert spezifische Codebeispiele. Promise ist ein Mechanismus in JavaScript zur Verarbeitung asynchroner Vorgänge. In der tatsächlichen Entwicklung ist es häufig erforderlich, einige asynchrone Aufgaben zu verarbeiten, die nacheinander ausgeführt werden müssen, und die Methode Promise.resolve () wird verwendet, um ein erfülltes Promise-Objekt zurückzugeben. Promise.resolve() ist eine statische Methode der Promise-Klasse, die a akzeptiert

Häufige Probleme und Lösungen bei der asynchronen Programmierung im Java-Framework Häufige Probleme und Lösungen bei der asynchronen Programmierung im Java-Framework Jun 04, 2024 pm 05:09 PM

3 häufige Probleme und Lösungen bei der asynchronen Programmierung in Java-Frameworks: Callback Hell: Verwenden Sie Promise oder CompletableFuture, um Callbacks intuitiver zu verwalten. Ressourcenkonflikt: Verwenden Sie Synchronisierungsprimitive (z. B. Sperren), um gemeinsam genutzte Ressourcen zu schützen, und erwägen Sie die Verwendung threadsicherer Sammlungen (z. B. ConcurrentHashMap). Nicht behandelte Ausnahmen: Behandeln Sie Ausnahmen in Aufgaben explizit und verwenden Sie ein Ausnahmebehandlungs-Framework (z. B. CompletableFuture.exclusionally()), um Ausnahmen zu behandeln.

Wie geht das Golang-Framework mit Parallelität und asynchroner Programmierung um? Wie geht das Golang-Framework mit Parallelität und asynchroner Programmierung um? Jun 02, 2024 pm 07:49 PM

Das Go-Framework nutzt die Parallelitäts- und Asynchronitätsfunktionen von Go, um einen Mechanismus zur effizienten Abwicklung gleichzeitiger und asynchroner Aufgaben bereitzustellen: 1. Parallelität wird durch Goroutine erreicht, sodass mehrere Aufgaben gleichzeitig ausgeführt werden können. 2. Asynchrone Programmierung wird über Kanäle implementiert kann ausgeführt werden, ohne den Hauptthread zu blockieren. Geeignet für praktische Szenarien wie die gleichzeitige Verarbeitung von HTTP-Anfragen, die asynchrone Erfassung von Datenbankdaten usw.

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

Asynchrone Python-Programmierung: Eine Möglichkeit, effiziente Parallelität in asynchronem Code zu erreichen Asynchrone Python-Programmierung: Eine Möglichkeit, effiziente Parallelität in asynchronem Code zu erreichen Feb 26, 2024 am 10:00 AM

1. Warum asynchrone Programmierung verwenden? Bei der herkömmlichen Programmierung werden I/O-Vorgänge blockiert. Das bedeutet, dass das Programm auf den Abschluss eines Vorgangs wartet, bevor es fortfährt. Dies kann für eine einzelne Aufgabe gut funktionieren, kann jedoch dazu führen, dass das Programm bei der Verarbeitung einer großen Anzahl von Aufgaben langsamer wird. Die asynchrone Programmierung durchbricht die Einschränkungen herkömmlicher blockierender E/A und verwendet nicht blockierende E/A. Dies bedeutet, dass das Programm Aufgaben zur Ausführung auf verschiedene Threads oder Ereignisschleifen verteilen kann, ohne auf den Abschluss der Aufgabe warten zu müssen. Dadurch kann das Programm mehrere Aufgaben gleichzeitig bearbeiten und so die Leistung und Effizienz des Programms verbessern. 2. Die Grundlage der asynchronen Python-Programmierung Die Grundlage der asynchronen Python-Programmierung sind Coroutinen und Ereignisschleifen. Coroutinen sind Funktionen, die es einer Funktion ermöglichen, zwischen Anhalten und Wiederaufnehmen zu wechseln. Die Ereignisschleife ist für die Planung verantwortlich

See all articles