Inhaltsverzeichnis
3. Vorteile der Async-Funktion " >3. Vorteile der Async-Funktion
4. Implementierung der asynchronen Funktion " >4. Implementierung der asynchronen Funktion
5. Verwendung der asynchronen Funktion " >5. Verwendung der asynchronen Funktion
6. Hinweise" >6. Hinweise
Heim Web-Frontend js-Tutorial Detaillierte Erklärung zur Verwendung der asynchronen Funktion in js

Detaillierte Erklärung zur Verwendung der asynchronen Funktion in js

May 22, 2018 am 09:44 AM
async javascript 使用方法

Dieses Mal werde ich Ihnen detailliert erklären, wie Sie asynchrone Funktionen in js verwenden. Was sind die Vorsichtsmaßnahmen, wenn Sie asynchrone Funktionen in js verwenden?

1. Die ultimative Lösung

Asynchroner Betrieb ist eine problematische Sache in der JavaScript-Programmierung. Es ist so problematisch, dass einige Leute verschiedene vorgeschlagen haben Lösungen und versuchen, dieses Problem zu lösen.

Von der frühesten Callback-Funktion über das Promise-Objekt bis hin zur Generator-Funktion gab es jedes Mal Verbesserungen, aber es fühlt sich unvollständig an. Sie alle weisen zusätzliche Komplexitäten auf und erfordern ein Verständnis der zugrunde liegenden Betriebsmechanismen der Abstraktion.

Bedeutet asynchrone E/A nicht nur das Lesen einer Datei? Warum muss es so kompliziert sein? Der höchste Stand der asynchronen Programmierung besteht darin, dass Sie sich keine Gedanken darüber machen müssen, ob sie überhaupt asynchron ist.

Asynchrone Funktionen sind das Licht am Ende des Tunnels und viele Menschen halten sie für die ultimative Lösung für asynchrone Vorgänge.

2. Was ist die Async-Funktion?

Kurz gesagt ist die asynchrone Funktion der Syntaxzucker der Generatorfunktion.

Im vorherigen Artikel gibt es eine Generatorfunktion, die zwei Dateien nacheinander liest.

var fs = require('fs');
var readFile = function (fileName){
 return new Promise(function (resolve, reject){
  fs.readFile(fileName, function(error, data){
   if (error) reject(error);
   resolve(data);
  });
 });
};
var gen = function* (){
 var f1 = yield readFile('/etc/fstab');
 var f2 = yield readFile('/etc/shells');
 console.log(f1.toString());
 console.log(f2.toString());
};
Nach dem Login kopieren

wird wie folgt als asynchrone Funktion geschrieben.

var asyncReadFile = async function (){
 var f1 = await readFile('/etc/fstab');
 var f2 = await readFile('/etc/shells');
 console.log(f1.toString());
 console.log(f2.toString());
};
Nach dem Login kopieren

Nach dem Vergleich werden Sie feststellen, dass die asynchrone Funktion darin besteht, das Sternchen (*) der Generator-Funktion durch asynchron zu ersetzen und yield durch waiting zu ersetzen, und das war's.

3. Vorteile der Async-Funktion

Die Verbesserungen der Async-Funktion gegenüber der Generatorfunktion spiegeln sich in den folgenden drei Punkten wider.

(1) Eingebauter Aktuator. Die Ausführung der Generatorfunktion muss auf dem Executor basieren, daher gibt es die Co-Funktionsbibliothek und die asynchrone Funktion verfügt über einen eigenen Executor. Mit anderen Worten: Die Ausführung asynchroner Funktionen ist genau die gleiche wie bei gewöhnlichen Funktionen, mit nur einer Zeile.

var result = asyncReadFile();

(2) Bessere Semantik. Async und Await haben eine klarere Semantik als Asterisk und Yield. async bedeutet, dass die Funktion einen asynchronen Vorgang enthält, undwait bedeutet, dass der folgende Ausdruck auf das Ergebnis warten muss.

(3) Breitere Anwendbarkeit. Gemäß der Konvention der Co-Funktionsbibliothek kann auf den Yield-Befehl nur eine Thunk-Funktion oder ein Promise-Objekt folgen, während auf den Wait-Befehl der Async-Funktion ein Promise-Objekt und primitive Typwerte (numerische Werte) folgen können , Zeichenfolgen und boolesche Werte, aber Dies entspricht einer synchronen Operation.

4. Implementierung der asynchronen Funktion

Die Implementierung der asynchronen Funktion besteht darin, die Generatorfunktion und den automatischen Executor in eine Funktion zu packen.

async function fn(args){
 // ...
}
// 等同于
function fn(args){ 
 return spawn(function*() {
  // ...
 }); 
}
Nach dem Login kopieren

Alle asynchronen Funktionen können in der zweiten Form oben geschrieben werden, wobei die Spawn-Funktion der automatische Ausführer ist.

Die Implementierung der Spawn-Funktion ist unten angegeben, bei der es sich im Grunde um eine Nachbildung des vorherigen automatischen Executors handelt.

function spawn(genF) {
 return new Promise(function(resolve, reject) {
  var gen = genF();
  function step(nextF) {
   try {
    var next = nextF();
   } catch(e) {
    return reject(e); 
   }
   if(next.done) {
    return resolve(next.value);
   } 
   Promise.resolve(next.value).then(function(v) {
    step(function() { return gen.next(v); });   
   }, function(e) {
    step(function() { return gen.throw(e); });
   });
  }
  step(function() { return gen.next(undefined); });
 });
}
Nach dem Login kopieren

Die Async-Funktion ist eine sehr neue Syntaxfunktion, so neu, dass sie nicht zu ES6, sondern zu ES7 gehört. Derzeit befindet es sich noch im Vorschlagsstadium, die Transcoder Babel und Regenerator unterstützen es jedoch bereits und können nach der Transkodierung verwendet werden.

5. Verwendung der asynchronen Funktion

Wie die Generatorfunktion gibt die asynchrone Funktion ein Promise-Objekt zurück, und Sie können das then verwenden Methode zum Hinzufügen einer Rückruffunktion. Wenn die Funktion ausgeführt wird und auf das Warten stößt, kehrt sie zuerst zurück, wartet, bis der ausgelöste asynchrone Vorgang abgeschlossen ist, und führt dann die nachfolgenden Anweisungen im Funktionskörper aus.

Hier ist ein Beispiel.

async function getStockPriceByName(name) {
 var symbol = await getStockSymbol(name);
 var stockPrice = await getStockPrice(symbol);
 return stockPrice;
}
getStockPriceByName('goog').then(function (result){
 console.log(result);
});
Nach dem Login kopieren

Der obige Code ist eine Funktion zum Abrufen von Aktienkursen. Das Schlüsselwort async vor der Funktion zeigt an, dass es innerhalb der Funktion asynchrone Vorgänge gibt. Beim Aufruf dieser Funktion wird sofort ein Promise-Objekt zurückgegeben.

Das folgende Beispiel gibt einen Wert aus, nachdem die Anzahl der Millisekunden angegeben wurde.

function timeout(ms) {
 return new Promise((resolve) => {
  setTimeout(resolve, ms);
 });
}
async function asyncPrint(value, ms) {
 await timeout(ms);
 console.log(value)
}
asyncPrint('hello world', 50);
Nach dem Login kopieren

Der obige Code gibt an, dass nach 50 Millisekunden „Hallo Welt“ ausgegeben wird.

6. Hinweise

Das Promise-Objekt hinter dem Befehl „await“ kann dazu führen, dass es abgelehnt wird. Daher ist es am besten, den Befehl „await“ in „try“ einzufügen ...Codeblock abfangen. Der Befehl

async function myFunction() {
 try {
  await somethingThatReturnsAPromise();
 } catch (err) {
  console.log(err);
 }
}
// 另一种写法
async function myFunction() {
 await somethingThatReturnsAPromise().catch(function (err){
  console.log(err);
 });
}
Nach dem Login kopieren

await kann nur in asynchronen Funktionen verwendet werden. Bei Verwendung in normalen Funktionen wird ein Fehler gemeldet.

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 // 报错
 docs.forEach(function (doc) {
  await db.post(doc);
 });
}
Nach dem Login kopieren

上面代码会报错,因为 await 用在普通函数之中了。但是,如果将 forEach 方法的参数改成 async 函数,也有问题。

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 // 可能得到错误结果
 docs.forEach(async function (doc) {
  await db.post(doc);
 });
}
Nach dem Login kopieren

上面代码可能不会正常工作,原因是这时三个 db.post 操作将是并发执行,也就是同时执行,而不是继发执行。正确的写法是采用 for 循环。

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 for (let doc of docs) {
  await db.post(doc);
 }
}
Nach dem Login kopieren

如果确实希望多个请求并发执行,可以使用 Promise.all 方法。

async function dbFuc(db) {
 let docs = [{}, {}, {}];
 let promises = docs.map((doc) => db.post(doc));
 let results = await Promise.all(promises);
 console.log(results);
}
// 或者使用下面的写法
async function dbFuc(db) {
 let docs = [{}, {}, {}];
 let promises = docs.map((doc) => db.post(doc));
 let results = [];
 for (let promise of promises) {
  results.push(await promise);
 }
 console.log(results);
}
Nach dem Login kopieren

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Nodejs内存治理步骤详解

Vue页面骨架屏注入步骤详解

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung zur Verwendung der asynchronen Funktion in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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 verwende ich das DirectX-Reparaturtool? Detaillierte Verwendung des DirectX-Reparaturtools Wie verwende ich das DirectX-Reparaturtool? Detaillierte Verwendung des DirectX-Reparaturtools Mar 15, 2024 am 08:31 AM

Das DirectX-Reparaturtool ist ein professionelles Systemtool. Seine Hauptfunktion besteht darin, den DirectX-Status des aktuellen Systems zu erkennen. Möglicherweise wissen viele Benutzer nicht, wie man das DirectX-Reparaturtool verwendet. Schauen wir uns das ausführliche Tutorial unten an. 1. Verwenden Sie die Reparaturtool-Software, um die Reparaturerkennung durchzuführen. 2. Wenn nach Abschluss der Reparatur angezeigt wird, dass ein ungewöhnliches Problem in der C++-Komponente vorliegt, klicken Sie bitte auf die Schaltfläche „Abbrechen“ und dann auf die Menüleiste „Extras“. 3. Klicken Sie auf die Schaltfläche „Optionen“, wählen Sie die Erweiterung aus und klicken Sie auf die Schaltfläche „Erweiterung starten“. 4. Nachdem die Erweiterung abgeschlossen ist, erkennen und reparieren Sie sie erneut. 5. Wenn das Problem nach Abschluss des Reparaturtoolvorgangs immer noch nicht behoben ist, können Sie versuchen, das Programm, das den Fehler gemeldet hat, zu deinstallieren und erneut zu installieren.

Einführung in den HTTP 525-Statuscode: Erkunden Sie seine Definition und Anwendung Einführung in den HTTP 525-Statuscode: Erkunden Sie seine Definition und Anwendung Feb 18, 2024 pm 10:12 PM

Einführung in den HTTP 525-Statuscode: Verstehen Sie seine Definition und Verwendung. Der HTTP (HypertextTransferProtocol) 525-Statuscode bedeutet, dass der Server während des SSL-Handshake-Prozesses einen Fehler hat, was dazu führt, dass keine sichere Verbindung hergestellt werden kann. Der Server gibt diesen Statuscode zurück, wenn beim Transport Layer Security (TLS)-Handshake ein Fehler auftritt. Dieser Statuscode fällt in die Kategorie „Serverfehler“ und weist normalerweise auf ein Serverkonfigurations- oder Einrichtungsproblem hin. Wenn der Client versucht, über HTTPS eine Verbindung zum Server herzustellen, hat der Server keine Verbindung

So verwenden Sie Baidu Netdisk – So verwenden Sie Baidu Netdisk So verwenden Sie Baidu Netdisk – So verwenden Sie Baidu Netdisk Mar 04, 2024 pm 09:28 PM

Viele Freunde wissen immer noch nicht, wie man Baidu Netdisk verwendet, daher wird der Herausgeber unten erklären, wie man Baidu Netdisk verwendet. Wenn Sie es brauchen, schauen Sie es sich meiner Meinung nach an. Schritt 1: Melden Sie sich direkt nach der Installation von Baidu Netdisk an (wie im Bild gezeigt); Schritt 2: Wählen Sie dann „Meine Freigabe“ und „Übertragungsliste“ gemäß den Seitenaufforderungen (wie im Bild gezeigt); Friend Sharing“ können Sie Bilder und Dateien direkt mit Freunden teilen (wie im Bild gezeigt); Schritt 4: Wählen Sie dann „Teilen“ und wählen Sie dann Computerdateien oder Netzwerkfestplattendateien aus (wie im Bild gezeigt); Fünfter Schritt 1: Dann können Sie Freunde finden (wie im Bild gezeigt); Schritt 6: Die benötigten Funktionen finden Sie auch in der „Funktionsschatzkiste“ (wie im Bild gezeigt). Das Obige ist die Meinung des Herausgebers

Lernen Sie, schnell zu kopieren und einzufügen Lernen Sie, schnell zu kopieren und einzufügen Feb 18, 2024 pm 03:25 PM

So verwenden Sie die Tastenkombinationen zum Kopieren und Einfügen. Kopieren und Einfügen ist ein Vorgang, auf den wir bei der täglichen Verwendung von Computern häufig stoßen. Um die Arbeitseffizienz zu verbessern, ist es sehr wichtig, die Tastenkombinationen zum Kopieren und Einfügen zu beherrschen. In diesem Artikel werden einige häufig verwendete Tastenkombinationen zum Kopieren und Einfügen vorgestellt, um den Lesern dabei zu helfen, Kopier- und Einfügevorgänge bequemer durchzuführen. Tastenkombination zum Kopieren: Strg+Strg+C ist die Tastenkombination zum Kopieren. Durch Gedrückthalten der Strg-Taste und anschließendes Drücken der C-Taste können Sie den ausgewählten Text, die Dateien, Bilder usw. in die Zwischenablage kopieren. Um diese Tastenkombination zu verwenden,

Mar 18, 2024 am 11:07 AM

Das KMS Activation Tool ist ein Softwaretool zur Aktivierung von Microsoft Windows- und Office-Produkten. KMS ist die Abkürzung für KeyManagementService, einen Schlüsselverwaltungsdienst. Das KMS-Aktivierungstool simuliert die Funktionen des KMS-Servers, sodass der Computer eine Verbindung zum virtuellen KMS-Server herstellen kann, um Windows- und Office-Produkte zu aktivieren. Das KMS-Aktivierungstool ist klein und leistungsstark und kann mit einem Klick dauerhaft aktiviert werden. Es kann jede Version des Windows-Systems und jede Version der Office-Software aktivieren, ohne dass eine Verbindung zum Internet besteht und häufig aktualisiertes Windows-Aktivierungstool. Heute werde ich es Ihnen vorstellen. Lassen Sie mich Ihnen die kms-Aktivierungsarbeit vorstellen

So verwenden Sie Potplayer – So verwenden Sie Potplayer So verwenden Sie Potplayer – So verwenden Sie Potplayer Mar 04, 2024 pm 06:10 PM

Potplayer ist ein sehr leistungsfähiger Mediaplayer, aber viele Freunde wissen immer noch nicht, wie man Potplayer verwendet. Heute werde ich die Verwendung von Potplayer im Detail vorstellen und hoffe, allen zu helfen. 1. PotPlayer-Tastenkombinationen Die standardmäßigen Tastenkombinationen für den PotPlayer-Player sind wie folgt: (1) Wiedergabe/Pause: Leertaste (2) Lautstärke: Mausrad, Pfeiltasten nach oben und unten (3) Vorwärts/Rückwärts: Pfeil nach links und rechts Tasten (4) Lesezeichen: P- Lesezeichen hinzufügen, H-View-Lesezeichen (5) Vollbild/Wiederherstellen: Eingabe (6) Geschwindigkeit: C-Beschleunigung, 7) Vorheriges/nächstes Bild: D/

So verbinden Sie Zellen mithilfe von Tastenkombinationen So verbinden Sie Zellen mithilfe von Tastenkombinationen Feb 26, 2024 am 10:27 AM

So verwenden Sie die Tastenkombinationen zum Zusammenführen von Zellen In der täglichen Arbeit müssen wir häufig Tabellen bearbeiten und formatieren. Das Zusammenführen von Zellen ist ein gängiger Vorgang, mit dem mehrere benachbarte Zellen zu einer Zelle zusammengeführt werden können, um die Schönheit der Tabelle und den Effekt der Informationsanzeige zu verbessern. In gängigen Tabellenkalkulationsprogrammen wie Microsoft Excel und Google Sheets ist das Zusammenführen von Zellen sehr einfach und kann über Tastenkombinationen erfolgen. Im Folgenden wird die Verwendung von Tastenkombinationen zum Zusammenführen von Zellen in diesen beiden Programmen vorgestellt. existieren

Was ist PyCharm? Funktionseinführung und detaillierte Erklärung der Verwendung Was ist PyCharm? Funktionseinführung und detaillierte Erklärung der Verwendung Feb 20, 2024 am 09:21 AM

PyCharm ist eine professionelle integrierte Python-Entwicklungsumgebung (IDE), die von JetBrains entwickelt wurde. Sie bietet Python-Entwicklern leistungsstarke Funktionen und Tools, die das Schreiben von Python-Code effizienter und bequemer machen. PyCharm unterstützt mehrere Betriebssysteme, darunter Windows, macOS und Linux, sowie mehrere Python-Versionen und bietet zahlreiche Plug-Ins und Erweiterungsfunktionen, um Entwicklern die Anpassung der IDE-Umgebung an ihre eigenen Bedürfnisse zu erleichtern. P

See all articles